일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 익명 클래스
- 스파르타코딩클럽
- 함수형 인터페이스
- 정렬
- 프리미티브 타입
- 로컬 클래스
- 합병 정렬
- annotation processor
- 제네릭 와일드 카드
- 바운디드 타입
- junit 5
- 람다식
- 항해99
- System.out
- raw 타입
- Study Halle
- 접근지시자
- 제네릭 타입
- auto.create.topics.enable
- docker
- yield
- Switch Expressions
- throwable
- github api
- System.err
- 자바할래
- System.in
- 브릿지 메소드
- 상속
- 자바스터디
- Today
- Total
목록Book (37)
코딩하는 털보
클린 코드, 8. 경계 소프트웨어 경계(제공자가 제공하고 사용자는 사용하는 인터페이스)를 깔끔하게 처리하는 기법과 기교. 외부 코드 사용하기 Map과 같은 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다. (Map 객체를 가지고 있는 새로운 클래스를 만들어서 대신 사용하기) Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다. 경계 살피고 익히기 외부 코드를 익히고 우리의 프로그램과 통합하는 것은 어렵다. '학습테스트'는 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 뻔한 방식 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익힌다. 학습 테스트는 공짜 이상이다 학습 테스트는 드는 비용 없이 필요한 지식만 확..
클린 코드, 7. 오류 처리 오류 처리는 중요하지만 오류 처리 코드로 인해 프로그램 로직을 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 오류 코드보다 예외를 사용하라 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방식의 함수는 호출한 즉시 오류를 확인해야 하기 때문에 호출자 코드가 복잡해진다. 대신 예외를 던지면 로직이 오류 처리 코드와 뒤섞이지 않으니까 호출자 코드가 깔끔해진다. Try-Catch-Finally 문부터 작성하라 예외가 발생할 코드를 짤 때 try-catch-finally 문부터 코딩을 시작하면 try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워진다. 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 ..
클린 코드, 6. 객체와 자료구조 자료 추상화 변수와 클라이언트 사이에 함수라는 계층을 넣는다고 해서 구현이 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공하여 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 인터페이스나 getter/setter 메서드만으로는 추상화가 이뤄지지 않는다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 무지성으로 getter/setter를 만들지마라. 자료/객체 비대칭 객체는 자료를 숨기고 자료를 다루는 메서드를 공개한다. 자료 구조는 자료를 그대로 공개하며 메서드를 제공하지 않는다. 절차적인 코드로 도형 ..
클린 코드, 5. 형식 맞추기 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 형식을 맞추는 목적 의사소통은 전문 개발자의 일차적인 의무이며 코드 형식은 의사소통의 일환이다. 적절한 행 길이를 유지하라. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라. 이름은 간단하면서도 설명이 가능하게, 첫 부분은 고차원 개념과 알고리즘을 설명 내려갈수록 저차원 함수와 세부 내역. 개념은 빈 행으로 분리하라. 빈 행은 새로운 개념을 시작한다는 시각적 단서다. 완결된 생각하나를 행 묶음으로 표현하고 생각 사이에 빈 행을 넣어 분리한다. 세로 밀집도 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다. 수직 거리 서로 밀접한 개념은 세로로 가까이 둬야 한다. 연관성이 깊은 두 개념이 멀리 ..
클린 코드, 4. 주석 코드만이 정확한 정보를 제공하는 유일한 출처다. 주석은 잘못된 정보를 전달하기 쉽다. 주석을 가능한 줄이도록 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다. 표현력이 풍부하고 깔끔하며 주석이 없는 코드가 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다. 코드로 의도를 표현하라. 주석으로 의도를 전달하기 보다는 코드로 표현하려 노력하자. 좋은 주석 법적인 주석 저작권 정보 또는 소유권 정보, 계약조건 등 정보를 제공하는 주석 눈으로 보기엔 이해하기 힘든 메서드의 반환값을 설명해주는 주석, 그러나 함수 이름을 바꾸거나 다른 클래스를 만들어 코드를 이동하면 주석을 달지 않아도 되는 경우가 많다. 의도를 설명하는 주석 어떤 구현 방법 결정에 대한 의도를 설명하는 주석 의미를..
클린 코드, 3. 함수 함수를 잘 만드는 법! 작게 만들어라. 조건문/반복문에 들어가는 블록을 한줄로 줄인다. 보통 다른 함수를 호출한다. 한 가지만 해라. 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 여기에서 한 가지 작업이란 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행하는 것이다. 만약 의미 있는 이름으로 다른 함수로 추출할 수 있다면 그 함수는 여러 작업을 하고 있는 것이다. 함수 당 추상화 수준은 하나로. TO 문단을 읽어내려 가듯이 코드를 구현하여 각 함수가 일정한 추상화 수준을 유지하면서 다음 함수를 참고하고 소개하도록 한다. Switch 문 switch 문은 작게 만들거나 한 가지 작업만 하게 만들기 어렵다. 그러므로 switch ..
클린 코드, 2. 의미 있는 이름 의도가 분명하게 이름을 사용하라. 변수나 함수, 클래스 이름은 그 존재 이유와 수행 기능, 사용 방법을 설명할 수 있어야 한다. 코드의 의미를 흐리는 그릇된 정보를 피하라. ex) Map accountList 의미있게 구분할 수 있는 이름을 사용하라. a1, a2, ..., aN 같은 의도가 전혀 드러나지 않는 이름은 사용하지 않는다. Info, Data, a, an, the 같은 불용어를 별다른 의미없이 사용하는것은 적절하지 않다. 발음하기 쉬운 이름을 사용하라. 줄임말 같은 표현으로 발음이 이상해지는 이름은 좋지 않다. 검색하기 쉬운 이름을 사용하라. grep이나 find 명령으로 찾을 때 쉽게 찾을 수 있는 단어를 사용하는 것이 좋다. 인코딩을 피하라. 헝가리식 표..
디자인 패턴 1. 디자인 패턴 소개 / 스트래티지 패턴 객체지향 디자인 원칙 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 상속보다는 구성(컴포지션)을 활용한다. OOP의 핵심인 '상속', 하지만 이 책은 1부에서부터 상속의 단점을 먼저 보여주었다. 그것에 대한 책의 예시는 아래와 같다. public abstract class Duck { public void quack() { System.out.println("꽥!"); } public void swim() { System.out.println("수영을 합니다."); } public abstract void display(); } public class MallardD..
이펙티브 자바, 아이템 10. equals는 일반 규약을 지켜 재정의하라 equals 메서드는 다음 상황 중 하나에 해당하면 재정의하지 않는 것이 최선 각 인스턴스가 본질적으로 고유하다. ( 주로 값 클래스가 아닌 동작하는 개체를 표현하는 클래스 ex. Thread ) 인스턴스의 '논리적 동치성'을 검사할 일이 없다. 상위 클래스에서 재정의한 equals가 하위 클래스에서도 딱 들어맞는다. 클래스가 private이거나 package-private이고 equals 메서드를 호출 할 일이 없다. 그렇다면 equals를 재정의해야 할 때는 언제인가? 인스턴스간 논리적 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지 않았을 때. (주로 값 클래스 ex...
이펙티브 자바, 아이템 9. try-finally 보다는 try-with-resources를 사용하라 try-finally try-finally는 두 개 이상의 자원을 사용할 때 코드가 지저분해진다. try 블록과 finally 블록 양쪽에서 예외가 발생할 수 있어서 문제를 진단하기 어렵게 할 수 있다. try-with-resources try-with-resources에서 자동으로 닫힐 자원은 AutoCloseable 인터페이스를 구현해야 한다. 가독성이 좋으며 문제를 진단하기도 좋다. try-finally 보다는 try-with-resources를 사용하라 예외는 없다. 가독성은 좋아지고 문제를 진단하기 유용해진다.