클래스 기본 구성
- 생성자
- 필드
- 메서드
생성자
- 객체가 생성되는 시점에 자동으로 호출 되ㄴ 메서드
- 이름이 클래스 이름과 동일
- 생략 시 컴파일러가 빈 생성자를 자동 추가
- 반환 자료와 호출자가 없다는것 유의
- 다중 정의 가능 정의
인스턴스 동적 생성
- new 로 동적 생성
- 클래스 형식에 대한 변수 선언은 모두 참조
- 인스턴스 없으면 null 가리킴
- 한 인스턴스에 여러 참조자 존재 가능하다.
- 사이드 이펙트 고려
접근 제어 지시자
- public
- 외부 접근 허용
- protect
- 외부 접근 차단
- 같은 패키지 및 파생 클래스 접근 허용. 본인의 자식은 본인에게 접근을 허용한다.
- default
- 같은 패키지 소속 클래스만 접근 허용
- private
- 외부 접근 차단
this
- 메서드 호출 시 스택(0번 슬롯)에 값이 저장
- 정적 메서드에서는 사용이 불가함. ***
Shallow Copy
- 참조의 대상은 복사해서 늘리지 않고 참조자만 늘리는 형태
- 사이드 이펙트 원인
- 대상 인스턴스는 그대로 두고 참조만 늘어나는 경우
Deep Copy
- 원본 자체도 새로 할당하고 복사하는 방식
- 두 개의 원본 두 개의 참조가 각각 별도로 존재
- 참조를 멤버로 가지며 인스턴스를 동적할당하는 경우 복사 생성자 구현
cloon()
복사 생성자⭐️
class-name(class-name rhs)
- 객체의 사본을 생성할 때 사용하기 적절한 생성자 함수
- rhs 는 Right Hand Side 의 약자이며 복사의 원본 인스턴스에 대한 참조
- clone() 메서드를 만드는 방법이 있으나 규약이 모호한 부분이 있고 예외처리가 복잡한 단점이 있다.
보이지 않는 임시 객체
- 클래스가 함수의 반환 자료형이 될 경우 (이름 없는)임시 객체를 생성
- String 클래스는 덧셈 연산 시 임시 객체 생성
- 비효율의 직접접 원인이 될 수 있다
- 문자열 상수 관리 방식에 대해서는 섹션 8 JVM이 문자열 상수를 관리하는 구조 에서 자세히 다룬다.
정적 멤버
- 클래스 인스턴스가 없어도 독립적으로 존재 가능
- 필드, 메서드
- 일반 메서드와 달리 인스턴스 선언 없이 호출 가능
- 메서드에서 this 못 쓴다.
- 정적 필드는 final 선언 함으로써 심볼릭 상수로 활용하는 경우 많다.
800만