모르지 않다는 것은 아는것과 다르다.

Books 11

이펙티브 자바 2장 (객체 생성과 파괴)

[아이템 1] 생성자 대신 정적 팩터리 메서드를 고려하라 장점 이름을 가질 수 있다. public class Bike { private int wheelCount; private String color; private Bike(int wheelCount, String color) { this.wheelCount = wheelCount; this.color = color; } public static Bike createBike(String color) { return new Bike(2, color); } public static Bike createTricycle(String color) { return new Bike(3, color); } } 매번 인스턴스를 새로 만들지 않아도 된다. public ..

Books 2022.05.30

클린코드 10장

개요 이번 장에서는 클래스를 깨끗하게 짜는 방법을 공부한다. 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면, 아래와 같은 순서로 클래스를 정의한다. 정적 공개 상수(static public final) 정적 비공개 상수(static private final) 정적 비공개 변수(static private) 비공개 인스턴스 변수(private) 공개 함수(public method) 즉, 추상화 단계가 순차적으로 내려간다. 캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫다. 때때로 테스트를 위해서 private method나 변수를 protected로 공개해야 할 경우가 있다. 하지만 그 전에 비공개 상태를 유자할 방법을 강구해야한다. 캡슐화를 풀는것은 언제나 최후의 수단이다. 클래스는 ..

Books 2022.04.30

클린코드 9장 (단위 테스트)

단위 테스트 단위 테스트는 모듈(클래스) 단위로 정상적으로 작동하는지 모든 메소드에 대해 정상적으로 작동하는지 테스트하는것이다. 하지만 많은 프로그래머들이 제대로 된 테스트 케이스를 작성해야한다는 중요한 사실을 놓쳐버린다. TDD 법칙 세 가지 첫 번째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 두 번째 법칙: 컴파일을 실행하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 세 번째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 코드 유지하기 테스트 코드를 작성한다고 작성하지 않을때 보다 무조건 좋은것은 아니다. 테스트 코드를 깨끗하게 짜는 것이 중요하다. 깨끗하게 코드를 짜지 않는다면 새 버전을 출시 할 때마다 팀이 테스..

Books 2022.04.30

클린코드 8장

개요 개발을 하면서 모든 기능을 직접 개발하는 경우는 거의 불가능이다. 때때로는 패키지를 사기도하고, 오픈 소스를 사용하는 경우도 많다. 이번 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴보려고 한다. 외부 코드 사용하기 인터페이스 제공자와 인터페이스 사용자 사이의 경계를 정확히 파악하는 것은 중요하다. 패키지 제공자는 다양한 환경에서 고객의 요구사항을 충족시키기 위해서 적용성을 최대한 넓히려고 노력한다. 반면에 사용자는 자신의 요구에 집중할 수 있는 인터페이스를 원한다. 정리 하자면, 제공자는 폭넓게 제공하고 사용자는 자신의 요구사항에 맞는(폭 좁게) 기능을 제공받기를 원하기 때문에 이 둘간의 간극으로 인해서 문제가 생길 소지가 있다. 외부 코드의 대표적인 예시 -> java.util..

Books 2022.04.23

클린코드 6장 (객체와 자료구조)

개요 이번 장에서는 객체와 자료구조의 차이를 설명한다. 또한 변수를 비공개(private) 으로 정의하는 이유, 많은 프로그래머가 getter 와 setter 를 공개(public)해 비공개 변수를 외부로 노출하는 이유에 대해서 설명한다. 추상화 추상화란 무엇일까? 컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 즉, 추상화란 자료에 대한 핵심적인 부분을 간추려 내는 것을 말한다. 추상화를 통해서 개발자(사용자)는 세세한 구현 부분을 몰라도 기능을 사용할 수 있게 하는 것이다. 자료 추상화 먼저 아래와 같은 코드가 있다고 해보자 public class Point { public double x; public double y; } 위의 ..

Books 2022.04.23

클린코드 4장 (주석)

주석은 나쁜 코드를 보완하지 못한다. 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 모듈을 짜고 보니 알아보기 어렵다면 주석을 다는 것이아니라 알아보기 쉽게 다시 코드를 정리해야 한다. 코드로 의도를 표현하라 주석으로 코드를 설명하기 전에 코드만으로 의미를 포함할 수 있는 방법이 없는지 생각해봐야한다. //직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employee.flags & HOURLY_FLAG) && (employee.age>65)) 위와 같은 코드는 아래와 같이 바꿀 수 있다. if(employee.isEligibleForFullBenefits()) 위의 코드를 보면 충분히 의도를 파악할 수 있다. 좋은 주석 법적인 주석 법적인 이유로 특정 주석을 넣으라고 ..

Books 2022.04.23

클린코드 3장 (함수)

작게 만들어라 함수를 만드는 첫째 규칙은 작게만드는 것이다. 함수가 작을수록 한눈에 파악하기 쉽기 때문이다. 한 가지만 해라 함수는 한 가지를 해야한다. 하지만 그 한 가지를 잘 해야한다. 함수가 여러 기능을 하게된다면 테스트하는것도 복잡해 진다. 함수 당 하나의 추상화 수준만을 가져야한다. 함수 내 모든 문장의 추상화 수준이 동일해야한다. 추상화 수준을 맞추지 않으면 특정 표현이 근본 개념인지 아니면 세부사항인지 구분하기 어렵기 때문이다. 내려가기 규칙을 사용하면 추상화 수준을 맞추기 좋다. 내려가기 규칙을 사용하면 코드를 위에서 아래로 이야기 처럼 읽기 쉽게 코드를 작성할 수 있다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. Switch 문 switch 문은 작게 만드는 것이 어렵다..

Books 2022.04.17

클린코드 1장, 2장

1장 깨끗한 코드 C++ 창시자이자 C++ Programming Language 저자 Bjarne Stroustrup 나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 깨끗한 코드는 한 가지를 제대로 한다. Object Oriented Analysis and Design with Application 저자 Grady Booch 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명백한 추상화와 단순한 제어문으로 가득하다. OTI 창립자이자 이클립스 ..

Books 2022.04.17

템플릿 콜백 패턴 (토비의 스프링 3장)

Template Callback Pattern 전략 패턴의 변형이다. 정확히는 전략을 익명 내부 클래스로 구현한 전략 패턴이라고 할 수 있다. 스프링 3대 프로그래밍 모델 중 하나인 DI 에서 사용하는 특별한 형태의 전략 패턴이다. 여기서 전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부른다. 전략 패턴과 동일한가? -> 거의 모든 것이 동일하나, 전략을 익명 내부 클래스로 정의해서 사용하는 것에서 차이가 있다. 주로 try/catch/finally 블록을 사용하는 코드에 사용된다. 동작 흐름 클라이언트의 역할은 콜백 오브젝트를 만들고, 콜백이 참조할 정보를 제공한다. 만들어진 콜백은 클라이언트가 템플릿의 메소드를 호출할 때 파라미터로 전달된다. 템플릿은 ..

Books 2022.02.28

테스트란 (토비의 스프링 2장)

테스트 테스트란 만들어진 코드를 확신할 수 있게 도와주는 도구이다. 또한 변화에 유연하게 대처할 수 있고, 개발자에게 안심을 준다. 좋은 테스트란? 테스트하고자 하는 대상이 명확하다면 그 대상을 기준으로 단위테스트를 진행하는 것이 좋다. -> 대상에 집중할 수 있다. 동일한 테스트는 항상 동일한 결과를 보장해야한다. 순서에 영향을 받지 않아야 한다. 좋은 습관? 먼저 스프링 컨테이너 없이 테스트할 수 있는 방법을 우선적으로 고려해야한다. (통합테스트 보단 단위테스트!) 부정적인 케이스를 먼저 만드는 습관을 가져야 한다. 픽스퍼 테스트를 수행하는 데 필요한 정보나 오브젝트를 픽스쳐라고 한다. 픽스쳐를 아래와 같이 구현할 수 있다. @DisplayName("userDao test") public class ..

Books 2022.02.27