본문 바로가기

15

1장 - 리팩터링 리팩터링하기 리팩터링? -> 기능을 변경하지 않고 코드의 가독성과 유지보수가 쉽도록 코드를 변경하는 것 리팩터링을 해야 하는 이유 - 코드의 가독성을 높이면 새로운 기능을 구현하기 위한 시간을 확보할 수 있음 - 유지보수가 용이해지면 버그가 줄어들고 수정이 쉬워짐 - 좋은 코드는 생각하기 편함 무엇을 리팩터링 해야하나? 감각적으로 나쁜 코드를 찾아 리팩터링 하기는 쉽지 않음 규칙을 정해두고 규칙을 위반한 코드를 리팩터링 하면 좋지 않을까? ex) '메서드는 한 가지 작업을 수행해야 한다', '메서드는 다섯 줄 제한' 등등 리팩터링에 가장 좋은 방법은 테스트코드를 작성하는 것이지만 테스트코드를 작성하는 방법을 배우는 것 자체가 어려움 리팩터링에 익숙해 지는 방법 4가지 1. 리팩터링 패턴 패턴에 어긋나는 코드를 찾아 .. 2024. 1. 29.
이펙티브 자바 아이템29까지 읽고 느낀점 이펙티브 자바를읽으려고 마음먹었던 가장 큰 계기는 개발바닥 유튜브에서 진행했던 '랠릿 이력서 리뷰'를 보면서 나의 공부 방향이 잘못되었음을 느꼈고 기초부터 다시 공부해야겠다는 생각이 들어서이다. 각종 백엔드 개발자 공고를 보면 MSA, kafka, 등등 이름만 들어도 무시무시한 기술들을 우대사항으로 넣고 CQRS, 퍼사드 등등 여러 고급패턴의 존재를 보며 이걸 어디서부터 공부해야하지 라는 생각이 들었다. 하지만, 이러한 생각의 방향이 잘못되었다는 것은 이펙티브 자바를 보면서 깨달았다. 다양한 디자인 패턴(싱글톤, 정적 팩토리), 자바 제네릭, 컬렉션 등 자바의 기초적인 내용도 제대로 알고 있지 못하면서 위의 고급 기술들을 배워보겠다고 나댔던 내가 부끄러워졌다. 앞으론, 싸피 과정과는 별개로 자바 기초를 .. 2023. 7. 10.
자바 equals와 hashCode 일반적으론 equals는 재정의할 일이 없지만 다음과 같은 상황에선 재정의를 해줘야 한다. 객체 식별성(Object Identity; 두 객체가 물리적으로 같은가)이 아닌 논리적으로 같은지 확인해야 할 때이다. 핸드폰 번호를 저장하는 예시를 보자. 다음과 같은 PhoneNumber 클래스가 있고 public class PhoneNumber { private String a; private String b; private String c; private PhoneNumber() { } public static PhoneNumber createPhoneNumber(String a, String b, String c) { PhoneNumber phoneNumber = new PhoneNumber(); phon.. 2023. 7. 4.
의존 객체 주입 패턴(Dependency Injection) Dependency(의존 관계) : A가 B를 의존한다. ex) 자바 프로그래머는 자바에 의존한다. public class Programmer { private final JavaLanguage javaLanguage = new JavaLanguage(); } 프로그래머가 자바가 아닌 파이썬을 사용하고 싶을 때 프로그래머 클래스의 코드 변경이 일어난다. 즉, '프로그래머는 자바에 의존한다'고 볼 수 있다. 이는 SOLID 원칙 중 OCP(개방-폐쇄 원칙)에 위반하며 코드의 양이 많아질수록 유지보수 또한 어려워진다. 이러한 문제를 해결하기 위해 Dependency Injection(의존 관계 주입)을 사용한다. public class Programmer { private final JavaLanguage .. 2023. 7. 2.
싱글톤 - 리플렉션API 공격과 방어 싱글톤을 만드는 방식은 여러가지가 있는데 그 중 정적 팩토리 메서드를 사용하여 만드는 방법을 살펴보자. public class SingletonTest { private static SingletonTest instance = new SingletonTest(); private SingletonTest() { System.out.println("SingletonTest Instance Generated"); } public SingletonTest getInstance() { if (instance == null) { instance = new SingletonTest(); } return instance; } } SingletonTest 클래스 생성자를 외부에서 호출할 수 없도록 생성자에 privat.. 2023. 7. 2.
생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드? : 객체 생성의 역할을 하는 클래스 메서드 이펙티브 자바 Item-01에서는 생성자 대신 정적 팩토리 메서드를 고려하라고 한다. 생성자 대신 정적 팩토리 메서드를 사용하면 얻는 이점은 무엇일까? 코드 예시를 통해서 정적 팩토리 메서드를 알아보자. 특징 1. 이름을 가질 수 있다. 다음과 같은 상품(Item) 클래스와 생성자가 있다고 하면 public class Item01Data { private String itemName; private Integer price; private Long id; // id는 Repository가 부여함 public Item01Data(String itemName, Integer price) { this.itemName = itemName; this.. 2023. 7. 1.