티스토리 뷰

Item40의 핵심은 @Override를 붙일 수 있는 상황에는 반드시 붙이라는 것이다

책에서는 equals 메서드를 재정의하면서 발생할 수 있는 오묘한 실수를 예로 들었다

면접 단골 질문이기도 한 Override와 Overload의 차이점을 체화하고 있다면 저지르지 않을 실수지만

때로는 알고 있어도 틀릴 때가 있으니 제약이 필요하다, 그 제약이 바로 @Override다

 

재정의와 다중 정의를 간단하게 짚고 넘어가자

- Override 시그니처가 완전히 같되, 공변 반환을 지원하기 때문에 반환 타입은 달라질 수 있다

- Overload 메서드 반환 타입, 이름은 같되 매개변수를 다르게 받아 같은 이름으로 다른 타입, 개수의 인자를 받을 수 있다

 

현대적인 IDE를 쓰고 있다면 애노테이션은 색 자체가 달라 애노테이션이 더 붙어있다고

코드 파악이 어려워지는 것도 아니고 심지어 Javadocs와 함께 어우러져 있어도 코드 파악에 지장은 없다

@Override와 상관은 없지만 주석과 어우러진 코드를 보기 위해 lombok.RequiredArgsConstructor를 첨부했다

 

 

책의 예시에서는 @Override만 붙였다면 컴파일 에러로 실행 조차 하지 못 했을 문제가

런타임이 되어서야 에러를 터트리거나 더 심각하게는 잘못된 값이 반환되고 있음을 알고서야 문제 파악이 된다

프로그램을 실수로부터 지키기 위해서는 여러 제약이 필요하다, 제약을 꼼꼼히 지켜 Best-Practice 형태로 만들어야 하겠다

그냥 가기 아쉬우니 @Override 스펙도 한 번 살펴보자

 

https://docs.oracle.com/javase/7/docs/api/java/lang/Override.html

 

짧고 직관적인 설명이다

재정의하려는 메서드가 제약을 잘 지키는지 확인하여 만약 아니라면 에러 메세지를 뿜기 위한 애노테이션이란다

메서드에 붙일 수 있는 애노테이션이고 소스 코드 내에서만 유효하다

두 가지 제약이란 아래와 같다

1. super type에서 선언된 메서드를 재정의하는 경우

2. 객체 조상님 Object의 메서드를 재정의하는 경우

작성하는 클래스에서 선언된 메서드가 아니라면 일단 @Override 붙이고 보자

 

예전에는 정보를 찾아볼 때 우선 한글로 여러 블로그를 살펴보고 찾아본 정보에 만족하지 않았을 때

영어로 검색해서 공식 문서를 제외한 블로그 글들을 찾아봤었다

최근엔 검색 습관이 달라져서 일단 영어로 검색해서 공식 문서나 그에 버금가는 공신력 있는 사이트를 먼저 확인한다

한글 블로그는 쓰레기만 가득해서 그런 건 전혀 아니다만 대게 단편적인 정보만 있고 문제 해결법에 치중해있다

글쓴이의 관점으로 원문을 해석했기에 원문을 그대로 가져다가 번역한 게 아니라면 사견이 끼어들 수 밖에 없기도 하다

 

d2, 배민의 기술 블로그 등 빅테크들의 기술 블로그들은 예외다

개인적으로 d2 글들을 굉장히 좋아하는데 거긴 진짜 논문의 냄새가 난다

아쉬운 점으로는 고퀄의 글이라 자주 업로드 되지 않는다는 것이다

 

요즘은 잘못된 정보가 넘쳐나는 것도 한 몫 한다

나 역시 마찬가지고 가끔 지난 글을 읽어볼 때 잘못된 정보임을 깨닫고 뒤늦게 수정하기도 한다

그래서 애초에 정확한 정보 전달성 글은 쓰지 않는 편이고 문제 해결 경험과 사고 방식을 공유하는 목적으로 쓰고 있다

댓글
링크
글 보관함
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday