3. 클래스 - 두번째
생성자 다중 정의
일반 메서드처럼 생성자도 매개변수 구성이 다른 생성자를 여럿 정의 할 수 있음
여러 개가 다중 정의되어 있다하더라도
new연산 시 호출되는 생성자는 1개
생성자에서 다른 생성자 호출 가능
일반적으로 기본 생성자에 초기화와 관련된 코드가 들어가고 그 외 생성자에서 케이스마다 필요한 작업을 하게 된다.
때문에, 기본 생성자 외 생성자에서 기본생성자를 호출하는 구조로 만드는 것이 코드 중복을 줄일 수 있을 것이다.

깊은 복사와 얕은 복사 (중요!)
얕은 복사
참조의 대상은 복사해서 늘리지 않고 참조자만 늘리는 형태 (사이드 이펙트 발생의 원인)
대상 인스턴스는 그대로 두고 참조만 늘어나는 경우
깊은 복사
원본 자체도 새로 할당하고 복사하는 방식
얕은 복사와 달리 두 개의 원본 두 개의 참조가 각각 별도로 존재
사이드 이펙트 오류 가능성 없음
참조를 멤버로 가지며 인스턴스를 동적으로 할당하는 경우 복사 생성자 구현
복사 생성자
객체의 사본은 생성할 때 사용하기 적절한 생성자 함수
C++ 스타일 문법
rhs는 Right Hand Side 의 약어이며 복사의 원본(인스턴스에 대한 참조)clone()메서드를 만드는 방법이 있으나 규약이 모호한 부분이 있고 예외처리가 복잡한 단점이 있다.

보이지 않는 임시 객체
클래스가 함수의 반환 자료형이 될 경우(이름이 없는), 임시 객체를 생성
String클래스는 덧셈 연산 시 임시 객체 생성비효율의 직접적 원인이 될 수 있음
String은 명백한 클래스인데, 불변객체이기 때문에 덧셈 연산 시 새로운String객체를 생성해 반환한다.String을 리터럴로 사용하는 경우 힙 영역을 사용하는 것이 아닌, Runtime Constant Pool 을 사용한다.

정적 멤버
클래스 인스턴스 없어도 독립적으로 존재 가능
필드(모든 인스턴스에서 공유), 메서드
일반 메서드와 달리 인스턴스 선언 없이 호출 가능
메서드에서
this를 사용할 수 없음정적 필드는
final선언 함으로써 심볼릭 상수로 활용하는 경우가 많음
정적 멤버와 인스턴스 메모리 차이
정적 필드는 인스턴스 메모리와 독립적이며 메서드 코드는 인스턴스마다 다르지 않고 하나만 존재
클래스 메서드는 Method area 라는 영역에서 따로 존재한다.
왜냐면 인스턴스마다 필드는 달라질 수 있지만, 메서드는 동일하기 때문이다.

Last updated