클래스 기본 구성

  • 생성자
  • 필드
  • 메서드

생성자

  • 객체가 생성되는 시점에 자동으로 호출 되ㄴ 메서드
    • 이름이 클래스 이름과 동일
    • 생략 시 컴파일러가 빈 생성자를 자동 추가
    • 반환 자료와 호출자가 없다는것 유의
  • 다중 정의 가능 정의

인스턴스 동적 생성

  • 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만