티스토리 뷰
Item40의 핵심은 @Override를 붙일 수 있는 상황에는 반드시 붙이라는 것이다
책에서는 equals 메서드를 재정의하면서 발생할 수 있는 오묘한 실수를 예로 들었다
면접 단골 질문이기도 한 Override와 Overload의 차이점을 체화하고 있다면 저지르지 않을 실수지만
때로는 알고 있어도 틀릴 때가 있으니 제약이 필요하다, 그 제약이 바로 @Override다
재정의와 다중 정의를 간단하게 짚고 넘어가자
- Override 시그니처가 완전히 같되, 공변 반환을 지원하기 때문에 반환 타입은 달라질 수 있다
- Overload 메서드 반환 타입, 이름은 같되 매개변수를 다르게 받아 같은 이름으로 다른 타입, 개수의 인자를 받을 수 있다
현대적인 IDE를 쓰고 있다면 애노테이션은 색 자체가 달라 애노테이션이 더 붙어있다고
코드 파악이 어려워지는 것도 아니고 심지어 Javadocs와 함께 어우러져 있어도 코드 파악에 지장은 없다
@Override와 상관은 없지만 주석과 어우러진 코드를 보기 위해 lombok.RequiredArgsConstructor를 첨부했다
책의 예시에서는 @Override만 붙였다면 컴파일 에러로 실행 조차 하지 못 했을 문제가
런타임이 되어서야 에러를 터트리거나 더 심각하게는 잘못된 값이 반환되고 있음을 알고서야 문제 파악이 된다
프로그램을 실수로부터 지키기 위해서는 여러 제약이 필요하다, 제약을 꼼꼼히 지켜 Best-Practice 형태로 만들어야 하겠다
그냥 가기 아쉬우니 @Override 스펙도 한 번 살펴보자
짧고 직관적인 설명이다
재정의하려는 메서드가 제약을 잘 지키는지 확인하여 만약 아니라면 에러 메세지를 뿜기 위한 애노테이션이란다
메서드에 붙일 수 있는 애노테이션이고 소스 코드 내에서만 유효하다
두 가지 제약이란 아래와 같다
1. super type에서 선언된 메서드를 재정의하는 경우
2. 객체 조상님 Object의 메서드를 재정의하는 경우
작성하는 클래스에서 선언된 메서드가 아니라면 일단 @Override 붙이고 보자
예전에는 정보를 찾아볼 때 우선 한글로 여러 블로그를 살펴보고 찾아본 정보에 만족하지 않았을 때
영어로 검색해서 공식 문서를 제외한 블로그 글들을 찾아봤었다
최근엔 검색 습관이 달라져서 일단 영어로 검색해서 공식 문서나 그에 버금가는 공신력 있는 사이트를 먼저 확인한다
한글 블로그는 쓰레기만 가득해서 그런 건 전혀 아니다만 대게 단편적인 정보만 있고 문제 해결법에 치중해있다
글쓴이의 관점으로 원문을 해석했기에 원문을 그대로 가져다가 번역한 게 아니라면 사견이 끼어들 수 밖에 없기도 하다
d2, 배민의 기술 블로그 등 빅테크들의 기술 블로그들은 예외다
개인적으로 d2 글들을 굉장히 좋아하는데 거긴 진짜 논문의 냄새가 난다
아쉬운 점으로는 고퀄의 글이라 자주 업로드 되지 않는다는 것이다
요즘은 잘못된 정보가 넘쳐나는 것도 한 몫 한다
나 역시 마찬가지고 가끔 지난 글을 읽어볼 때 잘못된 정보임을 깨닫고 뒤늦게 수정하기도 한다
그래서 애초에 정확한 정보 전달성 글은 쓰지 않는 편이고 문제 해결 경험과 사고 방식을 공유하는 목적으로 쓰고 있다
'Java > Effective Java' 카테고리의 다른 글
[Item42] 람다 쓰자! (0) | 2022.03.28 |
---|---|
[Item41] 마커 인터페이스 vs 마커 애노테이션 (0) | 2022.03.26 |
[Item39] Lombok 알아보기 (0) | 2022.03.22 |
[Item38] Enum 확장 시켜버리기 (0) | 2022.03.21 |
[Item37] Collectors.groupingBy로 EnumMap 만들기 (0) | 2022.03.20 |