전체 글 573

[Effective Java]21.인터페이스는 구현하는 쪽을 생각해 설계해라

자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8에서 디폴트 메서드를 추가할 수 있도록 변경되었지만 이를 믿고 그대로 사용하는 것은 위험하다. 만약 인터페이스에 디폴트 메서드를 선언한다면 디폴트 메서드를 재정의하지 않은 해당 인터페이스를 구현한 모든 클래스에서 디폴트 구현이 쓰이게 된다. 이 부분이 주의해야 할 점이라고 한다. 그 이유는 매끄럽게 연동되리라는 보장이 없기 때문이다. 자바 7까지는 "현재의 인터페이스에 새로운 메서드가 추가될 일은 영원히 없다"고 가정하고 작성되었다. 이러한 디폴트 메서드는 구현 클래스를 고려하지 않고 무작정 '삽입'만 될 뿐이다. 자바 8에서는 핵심 컬렉션 인터페이스들에 다수의 디폴트 메서드가 추가되었다. 주로 람다를 참..

Book/Effective Java 2022.07.05

220627-220703

0627 백준 문제 풀기 과제테스트 하기 이펙티브 자바 서적 읽기(~아이템 19) 0628-0629 면접 준비 0630-0701 면접보고 받은 질문 정리 0702 코딩테스트 보기 테스트 주도 개발 서적 읽기(~58p) 이펙티브 자바 서적 읽기(아이템 20) 면접 개념 정리 0703 코딩테스트 보기 면접 개념 정리 이번주에 면접이 2개 잡혀서 면접 준비하는데에 시간을 좀 썼다! 아직 완벽하지 않지만 개념들에 대해서 어느정도 깊게 파악하는 것도 중요할듯하다.

TIL/2022 2022.07.03

[Effective Java]20.추상 클래스보다는 인터페이스를 우선하라

자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 두 가지이다. 자바 8부터 인터페이스도 디폴트 메소드를 제공할 수 있게 되어 이제는 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 한편 둘의 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 안게 되는 셈이다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. 인터페이스가 요구하는 메서드를 (아직 없다면) 추..

Book/Effective Java 2022.07.02

[Effective Java]19.상속을 고려해 설계하고 문서화하라

아이템 18에서는 상속을 염두에 두지 않고 설계했고 상속할 때의 주의점도 문서화해놓지 않은 '외부' 클래스를 상속할 때의 위험성을 경고했다. 여기서 '외부'란 프로그래머의 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻이다. 그렇다면 상속을 고려한 설계와 문서화란 정확히 무얼 뜻할까? 우선, 메서드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야한다. 달리 말하면, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. 클래스의 API로 공개된 메서드에서 클래스 자신의 또 다른 메서드를 호출할 수도 있다. 그런데 마침 호출되는 메서드가 재정의 가능 메서드라면 그 사실을 호출하는 메서드의 API 설명에 적시해야 한다. 덧붙여서 어떤 ..

Book/Effective Java 2022.06.27

220620-220626

0620-0624 과제테스트 하기 JPA 강의 듣기(실전! 스프링 데이터 JPA) 0625 인성검사 보기(오프라인) 코딩테스트 보기(못 푼 문제 다시 풀어보기) 지원서 작성 0626 백준 문제 풀기 이번 과제는 설계를 해야하는 부분이랑 고민할 부분이 있어서 시간을 많이 투자했다! 테스트 코드는 강의를 듣거나 이것저것 찾아봐도 좀 애매한 감이 있어서 나중에 책을 한 권 사서 읽으면 좋을것 같다. JPA를 사용하다 보니까 Optional도 이것저것 적용해보는데 확실히 가독성이 좋은 부분이 많은 것 같아서 앞으로 적극 활용해야겠다는 생각이 든다!

TIL/2022 2022.06.26

220613-220619

0613 과제 테스트하기 백준문제풀기(ZOAC) 0614 과제 테스트하기 0615 과제 테스트 마무리+제출 면접 준비 0616 면접 준비 0617 면접 보기 0618 과제 테스트 시작 테스트 코드 관련 강의/블로그 보기 0619 과제 테스트하기 요새는 과제 테스트를 좀 하고 있다. JPA 기반으로 처음 적용해보니까 어렵긴한데 재밌다. 계속 구현 하다보면 과제 테스트도 어느정도 익숙해질 것 같다!

TIL/2022 2022.06.19

ZOAC

📍 문제 설명 https://www.acmicpc.net/problem/16719 16719번: ZOAC 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로 www.acmicpc.net 💡 접근 처음에는 n개중에 1~n개 뽑는 조합으로 풀고 뽑힌 조합에서 걸러내려 했다. 근데 모든 경우를 뽑다보니 시간 초과가 났다. 이미 뽑은 문자들을 방문처리 하면서 출력하고 뽑는 문자들에 대해서 왼쪽 오른쪽 탐색을 해주면 불필요한 탐색을 안해도 된다. 👩‍💻 코드 import java.io.BufferedReader; import java.io.IOException; i..

Algorithm/baekjoon 2022.06.13

220606-220612

0606 강의 들은거 정리(mvc1, HTTP, ~메세지, 국제화) 이펙티브 자바(~아이템14) 코딩테스트 보기 0607 스프링 강의 정리(~쿠키, 세션) 이펙티브 자바(~아이템17) 0608 스프링 강의 정리(~파일 업로드) 면접 개념 정리 0609 JPA 강의 듣기(~엔티티 매핑) 면접 개념 정리 0610 JPA 강의 듣기(~연관 관계 매핑) 백준 코딩 대회 이펙티브 자바(~아이템 18) 인적성 보기 0611 JPA 강의 듣기(~프록시) 과제테스트 하기 0612 코딩테스트 보기 JPA 강의 듣기(~JPQL) 스프링부트&AWS 책 필요한 부분 다시 읽어보기

TIL/2022 2022.06.12

[Effective Java]18.상속보다는 컴포지션을 사용하라

상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 된다. 상위 클래스와 하위 클래스를 모두 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전한 방법이다. 확장할 목적으로 설계되었고 문서화 잘된 클래스(아이템 19)도 마찬가지로 안전하다. 하지만 일반적인 구체 클래스를 패키지 경계를 넘어, 즉 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 상기하자면 이 책에서의 '상속'은 (클래스가 다른 클래스를 확장하는) 구현 상속을 말한다. 이번 아이템에서 논하는 문제는 (클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는) 인터페이스 상속과는 무관하다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 다르게 말하면 상..

Book/Effective Java 2022.06.10