day10 review
클래스: 정보를 쉽게 관리하기 위해 만드는 것
클래스의 구성
- 멤버변수 : 정보
- 메소드 : 기능
- 생성자 : 정보를 초기화
클래스 만드는 과정
1. 멤버변수 : 꼭 먼저 필요
2. 생성자 : 생성자는 멤버변수를 초기화하는 것이기 때문에 멤버변수가 먼저임.
3. 멤버메소드 : -
예1)
한국인 클래스를 만들기
멤버변수 : 이름, 성별, 주민번호, 나이, 주소 등
예2)
상품 클래스
멤버변수 : 카테고리, 상품명, 재고량, 판매량, 가격 등
접근제한자 종류
1. public : 본인클래스 + 같은패키지 + 자식클래스 + 다른 패키지
2. protected : 본인클래스 + 같은패키지 + 자식클래스
3. (default) : 본인클래스 + 같은패키지
4. private : 본인클래스
생성자
멤버변수 초기화 : 일반 변수인 경우 => 초기값을 설정
참조 변수인 경우 => 객체를 생성
생성자의 특징 : 생성자의 이름은 클래스명과 같다.
생성자는 객체를 생성할 때, 자동으로 호출된다.
생성자는 객체를 생성할 때를 제외하고 임의로 호출할 수 없다. (new랑 같이 쓰는데, 그때 자동으로 호출됨.)
예) Point pt = new Point(); -> 객체생성할 때, 자동으로 생성자가 호출된 상황
잘못된 예) pt.Point(); -> 생성자를 이렇게 호출할 수 없음.
생성자가 없는 경우, 기본 생성자가 만들어진다.
생성자는 여러개 있을 수 있다. (= 생성자 오버로딩)
*생성자 오버로딩?
- 생성자 오버로딩은 매개변수의 종류나 수가 다른 경우 만들 수 있다.
- 매개변수의 갯수가 다른 경우 가능 (예: 기본생성자, 생성자(int num3, num4) => 매개변수 갯수가 다름)
- 매개변수의 타입이 다른 경우 가능 (예: 생성자(int num3, int num4), 생성자(double num5, double num6)
=> 매개변수 갯수는 같지만 타입이 달라서 가능/ 타입이 하나만 달라도 가능함)
리턴타입 : 없음. (void가 아니라 아예 리턴타입 항목이 존재 하지 않음)
잘못된 예) public 클래스명(){}
잘못된 예) public void 클래스명(){} => void가 붙으면 생성자가 아니라 메소드가 됨.
복사 생성자 : 생성자의 매개변수로 같은 클래스의 객체가 오는 경우
public 클래스명(클래스명 객체명){}
this 객체(혼공자 p.272)
- 클래스 안에서만 사용(멤버 메소드, 생성자에서 사용가능)
- 객체인데 "나"를 의미
- 매개변수의 이름과 멤버 변수의 이름이 같은 경우, (멤버변수 앞에 this. 으로)필수로 사용
- this() : 해당 클래스의 생성자
this()생성자는 생성자안에서 첫줄에 와야한다.
오버로딩
같은 이름의 메소드/생성자가 여러개인 경우 매개변수가 다른 경우에 가능
1. 매개변수의 갯수가 다른 경우
2. 매개변수의 갯수가 같지만 타입이 다른 경우
종류: 생성자 오버로딩
메소드 오버로딩
<수업 외 설명>
메소드 매개변수의 갯수를 모를 때 사용가능
1. 배열
2. ...
일반변수 vs 참조변수
- 기본타입 변수 - 기본타입이 아닌 변수
- 값을 저장 - 주소를 저장
- 예) int, char, double.. -예) 배열, String, 클래스, 열거형 등
멤버변수 vs 지역변수
- 해당 클래스 안 전체 - 변수가 선언된 위치에서 포함된 범위
객체 멤버 변수 vs 클래스 멤버 변수(정적 멤버 변수, static이 붙은)
- 멤버변수를 호출할 때, - 멤버변수를 호출할 때, 클래스 이름으로 호출
객체이름으로 호출
- 객체명. 멤버변수명 - 클래스명.멤버변수명(객체명, 멤버변수명도 가능)
- static이 없음 - static이 있음
- 객체 당 하나씩 존재 - 클래스 당 하나씩 존재(모든 객체가 공유)
예)
기아 자동차 클래스
-멤버변수 : 제조사, 차명, 생산량(기아자동차 생산량)
- 객체 멤버변수 : 차명
- 클래스 멤버변수 : 제조사(하나의 이름으로 모든 차들을 대표할 수 있음), 생산량(자동차 마다 생산량을 가진게 아니라 클래스가 가지고 있음)
=공유하는
객체 멤버 메소드 vs 클래스 멤버메소드
-static 없음 =객체 -static 있음 = 클래스
-객체.메소드명() 으로 호출 -클래스.메소드명 으로 호출(Math.random())
-각 객체마다 메소드를 가지고 있음 -하나의 클래스가 메소드를 가지고 있음
클래스 멤버변수/메소드와 객체 멤버 변수/메소드의 사용시 유의 사항
- 클래스 멤버변수/메소드는 객체 메소드에서 사용 가능
- 클래스 멤버변수는 클래스 메소드에서 사용 가능
- 객체 멤버변수/메소드는 클래스 메소드에서 사용 불가능
- 객체 멤버변수는 객체메소드에서 사용 가능
- 클래스 변수 /메소드는 클래스가 메모리에 올라갈 때 선언
- 객체 변수/메소드는 객체가 생성될 때 선언
- 클래스 메소드가 호출된 시점에 객체가 만들어져 있는지 안만들어져 있는지 알 수 없고,
어떤 객체의 정보를 출력해야할지 모르기 때문에 클래스 메소드에서는 객체 변수/메소드를 호출할 수 없다.
final : 변경이 불가능 ==> 메소드&클래스 final은 나중에 상속을 배우고나서 배울 예정.
- 변수 : 변수 앞에 final이 붙으면 => 상수가 됨.
- 상수가 되면 값을 수정/변경할 수 없음.
- 생성자에서 final 변수를 초기화할 수 있다. 단 한 번 초기화 한 후에는 변경할 수 없다.
- 메소드 : 메소드 앞에 final이 붙으면 => 메소드 오버라이딩 불가능
- 클래스 : 클래스 앞에 final이 붙으면 => 상속이 불가능 (예: String)-> 앞에 final이 붙어있대..