본문 바로가기

전체 글50

우아한테크캠프 Pro 회고 우아한테크캠프 Pro 우연히 우아한테크캠프 Pro 과정의 설명회를 한다는 소식을 접했다. 그동안 우아한테크캠프 Pro 과정이 있다는 것은 알았지만 정확히 무엇을 하는 과정인지는 몰라서 설명회를 보았다. https://www.youtube.com/watch?v=jnK-vUzlhMo 만 3년 이상의 경력의 백엔드 개발자를 위한 교육으로 NextStep의 양질의 교육들의 액기스를 모아놓은 과정같았다. 그리고 수료생에게 우아한형제들에 지원할 수 있는 기회도 제공이 되었다. 지원 계기 다른 지원자들에 비해 내 경력은 정말 많다. 그럼에도 경력에 비해 실력이 좋다고 말할 수 없는 것이 현실이라고 생각한다. 나의 부족함을 채워줄 수 있는 좋은 커리큘럼이라고 생각이 되었다. 그리고 얼마전에 DDD 교육 신청을 실패했었.. 2022. 2. 26.
4장. 주석 오늘 읽은 범위 4장. 주석 기억하고 싶은 내용 “나쁜 코드에 주석을 달지 마라. 새로 짜라.” (p.68) 주석은 나쁜 코드를 보완하지 못한다. (p.69) 코드 품질이 나쁘다면 주석을 추가할 것이 아니라 코드를 정리해야 한다. 코드로 의도를 표현하라! (p.70) 좋은 주석 (p.70) 정말로 좋은 주석은, 주석을 달지 않을 방법을 찾아낸 주석이다. 법적인 주석 정보를 제공하는 주석: 주석이 유용하다 할지라도, 가능하다면, 함수 이름에 정보를 담는 편이 더 좋다. 의미를 명료하게 밝히는 주석: 인수나 반환값이 표준 라이브러리나 변경하지 못하는 코드에 속한다면 의미를 명료하게 밝히는 주석이 유용하다. 결과를 경고하는 주석: 때로 다른 프로그래머에게 결과를 경고할 목적으로 주석을 사용한다. TODO 주석.. 2022. 2. 25.
3장. 함수 오늘 읽은 범위 3장. 함수 기억하고 싶은 내용 작게 만들어라! (p.42) 함수를 만드는 첫째 규칙은 ‘작게!’다. 함수를 만드는 둘째 규칙은 ‘더 작게!’다. 함수에서 들여 쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 한 가지만 해라! (p.44) 함수는 한 가지를 해야 한다. 그 한 가지를 잘해야 한다. 그 한 가지만을 해야 한다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. 함수 당 추상화 수준은 하나로! (p.45) 함수가 확실히 ‘한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. Switc.. 2022. 2. 23.
2장. 의미 있는 이름 오늘 읽은 범위 2장. 의미 있는 이름 기억하고 싶은 내용 의도를 분명히 밝혀라: 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. (p.22) 그릇된 정보를 피하라: 그릇된 단서는 코드 의미를 흐린다. (p.24) 의미 있게 구분하라: 읽는 사람이 차이를 알도록 이름을 지어라. (p.25) 발음하기 쉬운 이름을 사용하라: 발음하기 어려운 이름은 토론하기도 어렵다. (p.27) 검색하기 쉬운 이름을 사용하라: 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다. (p.28) 인코딩을 피하라: 이름에 불필요한 정보를 추가하지 말고 IDE를 활용하라. (p.29) 자신의 기억력을 자랑하지 마라: 전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내.. 2022. 2. 20.
1장. 깨끗한 코드 오늘 읽은 범위 추천사 0장. 들어가면서 1장. 깨끗한 코드 기억하고 싶은 내용 "사소한 곳에서 발휘하는 정직은 사소하지 않다" (p.xxii) 깨끗한 코드는 한 가지를 제대로 한다. (p.9) 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 명쾌한 추상화와 단순한 제어문으로 가득하다. (p.10) 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다. (p.12) 깨끗한 코드는 주의 깊게 작성한 코드다. (p.12) 중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라. (p.14) 보이스카우트 규칙: 캠핑장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라. (p.19) 소감 및 생각 "사소한 곳에서 발휘하는 정직은 사소하지 않다" 라는 추천사에서 제시한 문장이 크게 와닿았다. 사소한.. 2022. 2. 19.
프록시(Proxy) 패턴 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 할 수 있다. 구현 방법 장단점 장점 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다. 기존 코드가 해야 하는 일만 유지할 수 있다. 기능 추가 및 초기화 지연 등으로 다양하게 활용할 수 있다. 단점 코드의 복잡도가 증가한다. 실무 적용 사례 자바 다이나믹 프록시, java.lang.reflect.Proxy 스프링 스프링 AOP 예제 코드 https://github.com/jsyang-dev/study-designpattern/tree/master/src/main/java/me/study/designpattern/proxy 2022. 2. 14.
아이템 13. clone 재정의는 주의해서 진행하라 Cloneable 인터페이스 Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(mixin interface, 아이템 20)이다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedException을 던진다. 여러 문제점에도 불구하고 Cloneable 방식은 널리 쓰이고 있다.clone 믹스인 인터페이스: 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 '주된 타입' 외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 줄 수 있다. 의도한 목적을 제대로 이루지 못한 이유 clone 메서드가 선언된 곳인 Clona.. 2022. 2. 12.
플라이웨이트(Flyweight) 패턴 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴 자주 변하는 속성(또는 외적인 속성, extrinsit)과 변하지 않는 속성(또는 내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다. 구현 방법 장단점 장점 애플리케이션에서 사용하는 메모리를 줄일 수 있다. 단점 코드의 복잡도가 증가한다. 실무 적용 사례 자바 Integer.valueOf(int) 캐시를 제공한다. https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#valueOf-int 예제 코드 https://github.com/jsyang-dev/study-designpattern/tree/master/src/main/java/me/study/designp.. 2022. 2. 10.
Log4j에서 SLF4J + Logback 으로 전환하기 레거시에서 아직 사용 중인 Log4j를 SLF4J + Logback로 전환하려고 분석한 내용을 정리해본다. 로깅 퍼사드란 로거 API를 추상화한 인터페이스이다. 로깅에 관련된 여러 라이브러리에 대한 통일된 사용방식(API)을 제공하므로 로깅 라이브러리의 변경이 용이하다. 로깅 퍼사드: JCL, SLF4J 로거: JUL, Log4j, Log4j 2, Logback 퍼사드 패턴: 건물의 정면"을 의미하는 단어로, 어떤 소프트웨어의 다른 커다란 코드 부분에 대하여 간략화된 인터페이스를 제공해주는 디자인 패턴 SLF4J 사용 이유 JCL은 런타임에 로거를 바인딩한다. 로거의 동적 바인딩으로 비효율 발생한다. SLF4J은 컴파일 타임에 로거를 바인딩하므로 JCL에 비해 더 효율적이다. 적용 방법 pom.xml에 .. 2022. 2. 3.
데코레이터(Decorator) 패턴 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다. 구현 방법 장단점 장점 새로운 클래스를 만들지 않고 기존 기능을 조합할 수 있다. 컴파일 타임이 아닌 런타임에 동적으로 기능을 변경할 수 있다. 단점 데코레이터를 조합하는 코드가 복잡할 수 있다. 실무 적용 사례 자바 InputStream, OutputStream, Reader, Writer의 생성자를 활용한 Wrapper java.util.Collections가 제공하는 메소드들 활용한 Wrapper javax.servlet.http.HttpServletRequest/ResponseWrapper 스프링 ServerHttpRequestDecorator 예제 코드.. 2022. 2. 1.