전체 글 167

[CleanCode] 클래스

CleanCode - 클래스 클래스를 정의하는 표준 자바 관례에 따르면, 가장 먼저 변수 목록이 나옵니다. 변수 목록 다음에는 공개 함수가 나옵니다. 그리고 그 이후에는 비공개 함수가 나옵니다. 즉, 추상화 단계가 순차적으로 내려갑니다. 클래스를 만들 때 첫 번째 규칙은 크기입니다. 클래스가 작아야 좋다고 책에서는 강조를 하고 있습니다. 크기를 줄이는 방법 중 중요한 것은 바로 '작명' 입니다. 클래스 이름은 해당 클래스 책임을 기술해야 합니다. 명확히 해당 클래스의 책임을 기술한다면 클래스의 크기를 줄이는데 많은 도움이 됩니다. (하지만 작명이 가장 어려운 것 같습니다!) 그 다음은 SRP (Single Responsibility Principle). 단일 책임 원칙에 대해 설명합니다. SRP는 클래스..

CleanCode 2023.11.13

[CleanCode] 단위 테스트

CleanCode - 단위 테스트 이 장에서는 TDD에 대해 간단히 소개하고 있습니다. 책에서 알려주는 TDD 법칙 세 가지가 있는데, 다음과 같습니다. - 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. - 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. - 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 하지만 단순히 이렇게 일하면 실제 코드와 맞먹을 정도의 방대한 테스트 코드가 생기며, 관리 문제를 유발하기도 합니다. 그래서 깨끗한 테스트코드 관리가 필요합니다. 테스트 코드는 실제 코드 못지 않게 중요합니다. 그러므로 실제 코드처럼 깨끗하게 짜야 합니다. 테스트는 유연성, 유지보수성, 재사용성을 제공합니다. 깨끗한 테스트는 다음 규칙을 ..

CleanCode 2023.11.11

[CleanCode] 경계

CleanCode - 경계 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 거의 없습니다. 때로는 패키지를 사고, 때로는 오픈 소스를 쓰며, 때로는 다른 부서에서 만든 컴포넌트를 쓰며 개발합니다. 이렇듯 외부 코드를 사용하는 경우가 많은데, 이 외부 코드를 우리 코드에 깔끔하게 적용시켜야 합니다. 책에서는 이러한 경계를 깔끔하게 처리하는 방법을 안내해주고 있습니다. 예시로 java.util.Map 클래스가 등장합니다. Map은 굉장히 다양한 인터페이스로 수 많은 기능을 제공하고 있습니다. ex) clear(), remove(Object key), put(Object key, Object value)... Map을 단순히 반환하면 사용자가 불필요한 기능까지 전달하거나 변환의 책임까지 전가합니다. ..

CleanCode 2023.11.11

[CleanCode] 오류 처리

CleanCode - 오류 처리 오류 처리는 프로그래밍에 반드시 필요한 요소 중 하나입니다. 오류가 발생할 가능성은 항상 존재합니다. 그러므로 오류를 없애는 것 만큼 오류를 빠르게 바로 잡는 것이 더 중요합니다. 책에서는 오류 코드보다 예외를 사용하는 것을 권장하고 있습니다. 즉, 쉽게 말해 Try-Catch-Finally 문을 활용하여 예외를 사용하는 것을 추천합니다. 이는 앞서 3장에서도 언급한 내용이었습니다. 그리고 다른 것보다 중요한 내용은 null을 반환하지 마라는 내용입니다. 책에서는 null을 반환하드 코드는 나쁜 코드로 정의하고 있습니다. 이는 일거리를 늘릴 뿐 아니라 호출자에게 문제를 떠넘기는 코드라고 합니다. null을 반환한다면 호출자는 모든 곳에서 null 확인을 해야 합니다. 그래..

CleanCode 2023.11.10

[CleanCode] 객체와 자료 구조

CleanCode - 객체와 자료 구조 책에서 정의하는 객체와 자료 구조의 정의부터 알아보겠습니다. 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료구조 : 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. 객체와 자료구조는 근본적으로 양분됩니다. 아래 2가지 문장이 그 예시인데, 모두 참인 문장입니다. '절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가히기 쉽다.' '절차적인 코드는 새로운 자료구조를 추가하기 어렵다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다.' 객체와 자료구조는 각각 적합한 경우가 있습니다. 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우 -..

CleanCode 2023.11.04

[CleanCode] 형식 맞추기

CleanCode - 형식 맞추기 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 합니다. 코드 형식을 맞추기 위한 규칙을 정하고, 그 규칙을 따라야합니다. (팀이라면 팀 모두가 합의하여 함께 정하자) '코드 형식은 매우 중요하다' 코드 형식은 의사소통의 일환입니다. 그리고 가독성은 앞으로 유지보수하는 코드의 품질에 많은 영향을 끼친다. 책에서 원활한 소통을 장려하는 코드 형식이 몇 가지 있는데, 그 중 4가지만 정리해보겠습니다. 1. 적절한 행 길이를 유지하라. 하나의 파일에 모든 내용을 담는 것 보다 작은 파일로 잘 유지하는 것이 좋습니다. 책의 예제에서는 대다수 프로젝트의 파일이 500줄을 넘지 않고도 큰 프로젝트를 유지할 수 있다는 사실을 말하고 있습니다.. 엄격한 규칙이 아니지만 지키면 좋습니다..

CleanCode 2023.11.04

[CleanCode] 주석

CleanCode - 주석 잘 달린 주석은 그 어떤 정보보다 유용합니다. 하지만 책에서는 주석에 대해 부정적으로 표현하는 것 같습니다. 보통 주석을 아래와 같이 표현합니다. - 경솔하고 근거없는 주석은 코드를 이해하기 더 어렵게 만든다. - 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 이렇게 생각하는 이유는 주석은 나쁜 코드를 보완하지 못한다고 생각하기 때문입니다. 일반적으로 주석을 추가하는 이유는 코드 품질이 나쁘기 때문이라고 합니다. 자신이 저지른 안 좋은 코드를 감추기 위해 보통 주석을 단다고 합니다. 그리고 그렇게 주석을 다는 대신 코드를 다시 잘 짜는데 시간을 보내라고 팩트를 말합니다. '주석 대신 코드로 의도를 표현하라. 잘 짜여진 코드와 함수명이면 충분하다.' 책에서 말하는 몇 가지..

CleanCode 2023.10.21

[CleanCode] 함수

CleanCode - 함수 책에서 함수를 만들때 강조하는 몇 가지가 있는데, 그 중에 중요하다고 느낀 것들 4가지를 정리해보겠습니다. 1. 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게 만들어라' 함수를 만드는 둘째 규칙은 '더 작게 만들어라' 함수가 작을수록 좋다는 근거 자료는 제시하기 어렵지만, 책에서는 필자가 경험한 40년 이상의 내용을 바탕으로 무조건 작은 함수가 좋다고 확신한다고 합니다. 엄청 큰 함수보다 작은 함수가 코드의 유지보수 측면에서 이해하기 편하기 때문에, 같은 동작을 한다면 작은 함수가 더 좋다는 말은 어느정도 맞는 말이라고 생각합니다. 2. 한 가지만 해라! 함수는 한 가지를 해야하고, 그 한가지를 잘 해야 한다고 합니다. 책의 예시처럼 하나의 함수가 한 가지를 하는지 세 가지..

CleanCode 2023.10.12

[CleanCode] 의미있는 이름

CleanCode - 의미있는 이름 책에서 가장 중요하게 말하고 있는 내용을 한 문장으로 요약하면 다음과 같습니다. 의도를 분명히 밝혀라 의도가 분명하게 이름을 지으라 말하기는 쉽다. 하지만 가장 어려운 것은 이름을 짓는 것이고, 의도가 분명하게 이름을 짓는것은 정말 중요하다. 프로그래머에게 가장 어려운 일이 이름 짓기라는 조사도 있습니다. 아래와 같이 간단한 예제를 보겠습니다. int d; // 날짜, day 이 변수 d는 아무 의미도 없습니다. 경과 시간이나 날짜라는 의미를 위해서는 아래와 같이 측정하려는 값과 단위를 표현하는 이름이 필요합니다. int fileAgeInDays; int daysSinceCreation; 의도가 있는 이름을 사용 해야하는 이유에 대한 코드 예시를 추가로 보겠습니다. 아..

CleanCode 2023.10.01

SpringBoot 3.0의 AOT (Ahead of Time Compilation)

Spring Boot 3.0이 정식 출시됨에 따라 GraalVM 기반의 Spring Native image를 통한 AOT를 공식 지원하게 되었습니다. - AOT란? Java의 컴파일 방법 중 하나로 프로그램이 실행되기 전에, 코드를 기계어로 컴파일하는 방식입니다. 즉 런타임 전에 컴파일을 진행하므로, 빠른 실행이 가능하다는 장점이 있습니다. 장점은 3가지 정도 언급을 하고 있습니다. - Less Spring infrastructure to execute at runtime - Fewer conditions to evaluate at runtime - Less reflection, since programmatic bean registration is used 요약하자면 적은 리소스로 빠르게 실행이 가능하..

Spring 2023.04.12