일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- junit 5
- 제네릭 와일드 카드
- 로컬 클래스
- Study Halle
- System.out
- auto.create.topics.enable
- 함수형 인터페이스
- 자바할래
- 정렬
- 접근지시자
- annotation processor
- throwable
- 바운디드 타입
- 익명 클래스
- github api
- 프리미티브 타입
- docker
- System.err
- 브릿지 메소드
- 제네릭 타입
- 자바스터디
- Switch Expressions
- 항해99
- System.in
- raw 타입
- yield
- 람다식
- 상속
- 스파르타코딩클럽
- 합병 정렬
- Today
- Total
목록분류 전체보기 (253)
코딩하는 털보
백준 코드 퀴즈 2771번 부녀회장이 될테야 3중 for문으로 아파트 만들어 놓기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static int[][] apt = new int[15][14]; public static void main(String[] args) throws IOException { for (int i = 0; i < 14; i++) { apt[0][i] = i+1; } for (i..
클린 코드, 12 창발성 https://rockintuna.tistory.com/191?category=886434 백준 코드 퀴즈 2869번 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q2869 { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { String[] nums = reader.readLine().split(" "); int up = Inte..
소프트웨어 설계 품질을 높여주는 설계 규칙 4가지 모든 테스트를 실행한다. 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템은 '테스트가 가능한 시스템'이다. 테스트가 가능한 시스템을 만들려고 애쓰다보면 설계 품질이 좋아진다. SRP를 준수하는 클래스는 테스트가 훨씬 더 쉽다. 결합도가 높으면 테스트 케이스를 작성하기 어렵다. 그래서 테스트를 많이 작성할수록 DIP원칙을 적용하고 의존성 주입, 인터페이스, 추상화 등으로 결합도를 낮춘다. 중복을 없앤다. 소규모 재사용, TEMPLATE METHOD 패턴 등 중복을 제거할 수 있는 기법을 익혀야 한다. 템플릿 메서드 패턴, https://rockintuna.tistory.com/187 프로그래머 의도를 표현한다. 유지보수 비용을..
이펙티브 자바, 아이템 21, 22, 23 https://rockintuna.tistory.com/188?category=886433 이펙티브 자바, 아이템 21, 22, 23 이펙티브 자바, 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하는 것음 어렵다. 예를 들면 자바 8 Collection rockintuna.tistory.com
이펙티브 자바, 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 https://rockintuna.tistory.com/186 이펙티브 자바, 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하 이펙티브 자바, 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 상속을 고려한 설계와 문서화가 뜻하는 것. 상속용 클래스는 재정의할 수 있는 메서드들을 내 rockintuna.tistory.com 이펙티브 자바, 아이템 20. 추상 클래스보다는 인터페이스를 우선하라 https://rockintuna.tistory.com/187 이펙티브 자바, 아이템 20. 추상 클래스보다는 인터페이스를 우선하라 이펙티브 자바, 아이템..
이펙티브 자바, 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하는 것음 어렵다. 예를 들면 자바 8 Collection 인터페이스에 추가된 디폴트 메서드는 여러 서드파티 컬렉션 구현체에서 재정의 되지 않은 경우가 많기 때문에 동기화를 하지 못하는 등 여러 문제가 발생한다. 디폴트 메서드는 기존 구현체이 런타임 오류를 일으킬 수 있다. 디폴트 메서드를 추가하면 기존 구현체에 영향을 줄 수 있다. 기존 인터페이스에 새로운 디폴트 메서드를 추가하는 일은 꼭 필요한 경우가 아니라면 피해야한다. 핵심은 디폴트 메서드라는 도구가 있지만 인터페이스를 설계할 때는 여전히 세심한 주의를 기울여야 한다는 것. 새로운 인터페이스라면 릴리스 ..
이펙티브 자바, 아이템 20. 추상 클래스보다는 인터페이스를 우선하라 인터페이스를 우선해야 하는 이유 추상 클래스를 구현하려면 추상 클래스를 상속해야 한다. 자바는 단일 상속만 지원하므로 이 방식은 새로운 타입을 정의하는 데 커다란 제약을 안게 된다. 인터페이스는 기존 클래스에서 손쉽게 구현해넣을 수 있다. 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다. mixin : 클래스가 구현할 수 있는 타입, 믹스인을 구현한 클래스에 원래의 '주된 타입'외에 특정 선택적 행위를 제공한다고 선언하는 효과를 준다. (ex Comparable, Serializable, ...) 추상 클래스는 위에 나온 제약 때문에 믹스인을 정의할 수 없다. 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 ..
이펙티브 자바, 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 상속을 고려한 설계와 문서화가 뜻하는 것. 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다. 상속용 클래스의 메서드에서 자신의 다른 메서드를 호출할 수도 있는데(자기사용) 호출되는 메서드가 재정의될 수 있다면 클래스를 상속하여 메서드를 재정의할 때 문제가 발생할 수 있다. 때문에 자기사용에 대한 내용을 API 설명에 적시해야 한다. 백그라운드 스레드나 정적 초기화 과정에서도 메서드가 호출되어 자기사용이 발생할 수 있다. @implSpec 어노테이션은 자바독 도구가 API문서에 Implementation Requirements로 시작하는 메서드 내부 동작 방식 설명..
이펙티브 자바, 아이템 18. 상속보다는 컴포지션을 사용하라 https://rockintuna.tistory.com/184 이펙티브 자바, 아이템 18. 상속보다는 컴포지션을 사용하라 이펙티브 자바, 아이템 18. 상속보다는 컴포지션을 사용하라 동일한 패키지 안에서의 상속이나 확장할 목적으로 설계되었고 문서화도 잘 된 클래스의 상속은 안전하다. 그러나 일반적인 콘크리 rockintuna.tistory.com
이펙티브 자바, 아이템 18. 상속보다는 컴포지션을 사용하라 동일한 패키지 안에서의 상속이나 확장할 목적으로 설계되었고 문서화도 잘 된 클래스의 상속은 안전하다. 그러나 일반적인 콘크리트 클래스를 패키지 경계를 넘어서 다른 패키지의 콘크리트 클래스를 상속하는 일은 위험하다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 다르게 말하면, 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. 특히 상위 클래스의 메서드를 재정의해서 사용했을 때 문제가 발생하기 쉽다. 또는 하위 클래스에서 새로운 메서드를 만들때도 상위 클래스의 변경으로 인한 영향이 없다고 할 수는 없다. 상속 대신 컴포지션을 사용하자. 기존 클래스를 확장하는 대신 새로운 클래스에서 private 필드로 기존 클래..