메서드 재정의

메서드 오버라이딩(overriding)

  • 조상 클래스에 정의된 메서드를 자식 클래스에서 적합하게 수정하는 것
  • 오버라이딩의 조건
    • 메서드 이름이 같아야한다.
    • 매개 변수의 개수, 타입, 순서가 같아야 한다.
    • 리턴 타입이 같아야 한다.
    • 접근 제한자는 부모 보다 범위가 넓거나 같아야 한다.
    • 조상보다 더 큰 예외를 던질 수 없다.

Annotation

  • 사전적 의미: 주석
  • 컴파일러, JVM, 프레임워크 등이 보는 주석
  • 소스 코드에 메타 데이터를 삽입하는 형태
    소스 코드에 붙여 놓은 라벨
    코드에 대한 정보 추가->소스 코드의 구조 변경, 환경 설정 정보 추가 등의 작업 진행

  • JDK 1.5의 기본 annotation의 예
    • @Deprecated
      컴파일러에게 해당 메서드가 deprecated(없어질 수 있음) 되었다고 알려줌
    • @Override
      컴파일러에게 해당 메서드는 override한 메서드 임을 알려줌
      @Override가 선언된 경우 반드시 super class에 선언 되어있는 메서드여야 함
    • @SuppressWarnings
      컴파일러에게 사소한 warning의 경우 신경 쓰지 말라고 알려줌

Object

Object 클래스

  • 가장 최상위 클래스로 모든 클래스의 조상

toString 메서드

  • 객체를 문자열로 변경하는 메서드
  • 정작 궁금한 내용은 주소값 따위가 아닌 내용임
  • override를 사용하여 변경할 수 있음

equals 메서드

  • 두 객체가 같은지를 비교하는 메서드
  • 두 개의 레퍼런스 변수가 같은 객체를 가리키고 있는가?
  • 우리가 비교할 것은 정말 객체의 주소 값인가?
    • 두 객체의 내용을 비교할 수 있도록 equals 메서드 재정의
    • 객체의 주소 비교: == 활용
    • 객체의 내용 비교: equals 활용

hashCode

  • 객체의 해시 코드: 시스템에서 객체를 구별하기 위해 사용되는 정수 값
  • HashSet, HashMap 등에서 객체의 동일성을 확인하기 위해 사용
  • equals 메서드를 재정의할 때는 반드시 hashCode도 재정의할 것
    • 미리 작성된 String이나 Number 등에서 재정의된 hashCode 활용 권장

super

super 키워드

  • super를 통해 조상 클래스 멤버 접근
    • super.을 이용해 조상의 메서드 호출로 조상의 코드 재사용
  • 변수의 scope
    • 사용된 위치에서 점점 확장해가며 처음 만난 선언부에 연결됨
    • method 내부 -> 해당 클래스 멤버 변수 -> 조상 클래스 멤버 변수
  • this()가 해당 클래스의 다른 생성자를 호출하듯 super()는 조상 클래스의 생성자 호출
    • 조상 클래스에 선언된 멤버들은 조상 클래스의 생성자에서 초기화가 이루어지므로 이를 재활용
    • 자식 클래스에 선언된 멤버들만 자식 클래스 생성자에서 초기화
  • super()는 자식 클래스 생성자의 맨 첫 줄에서만 호출 가능
    • 즉 생성자의 첫 줄에만 this() 또는 super()가 올 수 있다.
  • 명시적으로 this() 또는 super()를 호출하지 않은 경우 컴파일러가 super() 삽입
    • 결론적으로 맨 상위의 Object까지 객체가 다 만들어지는 구조

      static method 안에서는 this, super를 사용할 수 없음.
      한 파일 내에서 public은 한 클래스에만 붙일 수 있고, 그 클래스는 파일 이름이 되어야 한다.