Java | 오버라이딩, enum 클래스

송은석·2022년 10월 7일
0

자바의 신 - 정리

목록 보기
3/5

자바의 신(책)을 통해 배우게 된 내용과 추가로 공부한 내용을 정리합니다.
8-17강 부분




오버라이딩, 오버로딩 시 리턴 타입은 변경될 수 있다.

  • 오버라이딩 시에는 접근 제어자, 리턴타입, 메소드 명과 매개변수 타입 및 개수가 동일해야 한다. 그런데 리턴 타입은 다음의 2가지 조건을 만족하면 변경할 수 있다고 한다.

    • void나 원시 타입이 아니다.
    • 형변환이 가능한 경우이다. ex) 부모 리턴 타입- Object, 자식 리턴 타입 - String
  • 한편, 오버로딩 시에는 리턴 타입이 자유롭게 변경 가능하다. 다만 메서드 시그니처가 달라야 하므로 반드시 매개 변수의 변화가 있어야 한다.



equals 메소드 사용 시

  • equals 메소드를 통해 객체를 비교하면, 기본적으로 hashcode()의 값을 비교하므로 내부의 필드 값들을 비교하고자 한다면 equals 메소드를 오버라이딩 하여 사용해야 한다. 이 때, hashcode 메소드도 함께 오버라이딩 해야 한다.



인터페이스와 추상 클래스의 필요

  • 왜 필요한지에 대해서는 알지 못했었는데, 이번에 알게 되었다. 애플리케이션의 설계 단계에서 인터페이스를 사용함으로써 미리 메소드의 이름과 매개변수, 리턴 타입 등을 정해 놓아 실제 개발 시 통일성을 주고, 협업이 보다 원활해 지도록 하기 위해서 사용하는 것이라고 한다.

Enum 클래스

  • 이전에는 공통 상수를 사용할 때 클래스 내 final static으로 변수를 선언하거나, interface에 상수를 선언했다고 한다. 그러나 컴파일 시 형 검사를 하지 않는 인터페이스의 타입 안정성 문제와, 네임 충돌 등의 문제들로 인해 jdk1.5부터 enum이 등장한다.

  • Enum 클래스는 호출되는 순간, 클래스 안의 각 상수 마다의 인스턴스를 생성하게 된다. 이 때 생성자를 통해 인스턴스 마다 값들을 할당해줄 수도 있다.

    		public enum Numbers {
      			ONE(1, "첫번째"),
          		SECOND(2, "두번째"),
      			THREE(3, "세번째"),
                  
                  private final int number;
                  private final String korean;
                  
                  Numbers(int number, String korean) { // 접근 제어자는 기본 private
                  	this.number = number;
                      this.korean = korean;
                  }
    					
                  // 메소드도 추가해 사용할 수 있다. 실제 인스턴스를 쓸 때는
                  // 싱글톤 형태로 사용되므로 스레드 환경에서 사용 시 주의해야 한다.
      		}
  • enum 인스턴스는 java.lang.enum로부터 values(), valueof(), ordinal() 메서드를 상속받아 사용할 수 있다. values는 전체 인스턴스들의 배열을, valueof는 매개변수로 상수 인스턴스의 toString 값과 일치하는 값이 들어오면 그 인스턴스를 반환한다. ordinal은 인스턴스의 index를 반환한다.



에러와 예외

자바스크립트에서는 에러와 예외에 대해서 크게 구분하지 않았던 것으로 기억하는데, 자바에서는 이를 보다 엄격히 나누는 듯 하다. 개발된 애플리케이션에 의해 발생한 문제는 예외로 처리하며, 이를 상세히 관리한다.



참고

책 | 자바의 신, 이상민 저
웹 사이트 | https://velog.io/@kyle/%EC%9E%90%EB%B0%94-Enum-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9
profile
Done is better than perfect🔥

0개의 댓글