[Java] 클래스
★클래스는 c언어의 구조체+메소드를 얹어놓은 것이다. 현실세계에 존재하는 객체들의 속성값과 기능을 추상화하는 역할을 한다.
★클래스 정의법
class Phone{
//멤버필드들
private int battery;
private String model;
//함수들
...
}
★클래스명과 같은 이름의 리턴타입이 없는 함수를 만듦으로써 생성자를 정의한다. 이 생성자를 이용해 new 키워드로 인스턴스를 만들어 낸다. 생성자를 이용해 멤버필드를 초기화 시킨다.
★인스턴스를 생성하면 그 어드레스에는 변수목록밖에 저장안됨. 함수는 인스턴스 별로 생성되지 않고, 클래스별로 따로 저장되어 모든 인스턴스에서 공유하게 됨 그러면 함수 입장에서 어떤 인스턴스가 접근하는지 구분할 수 없음 이때 함수 호출시 전달받은 보이지 않는 매개변수 this(인스턴스의 포인터)로 인스턴스를 구분한다. 즉 파라메터가 아무것도 없는 생성자를 만들어 줘도 일단 기본으로 this하나는 들어가있는 것. 따라서 메소드 내의 변수값은 모두 “this.”가 생략된 것임, “this.”를 굳이 붙여줘도 작동은 똑같이함 참고로 이 this는 상수값임, 변화시킬 수 없음
★생성자가 하나도 없으면 디폴트 생성자를 자동으로 하나 만든다.
★객체의 멤버를 초기화 하는 방법
- 직접 초기화 : private int a = 12;
- 블록 초기화 : {…}안에서 초기화 하는 방식
- 생성자 초기화 : 생성자로 초기화 하는 방식
직접초기화는 이미 값이 있기때문에 가장 최초에 적용됨
직접초기화 영역에 블록초기화 코드가 있기에 직접초기화 이후에 적용됨
생성자 초기화는 초기화 코드중 가장 마지막에 적용된다
★객체의 멤버는 메모리에서 위치가 다르다.
스택 : 지역변수, 함수들의 포인터(참조값)들이 만들어짐
가비지 콜렉션 힙 : 객체의 변수들의 값이 만들어짐
클래스 코드 : 객체의 함수들이 올라감
this매개변수는 멤버 메서드의 첫번째 매개변수로 처리된다.
★getter(값을 뱉어낸다), setter(값을 집어넣는다)
보통 멤버필드는 외부에서 값을 직접 참조하는것을 방지하기 위해 private으로 선언하고, 값을 참조하기 위한 정당한 방법을 정의한 메소드(getter/setter)를 따로 만들어 놓는다.