시스템 요구사항은 끊임없이 변하고, 우리는 변화에 유연한 코드를 작성해야할 의무가 있다. 중복 코드를 줄이고, 변화에 유연한 코드를 작성하기 위해서는 어떻게 해야할까 ? 동작 파라미터화 첫 날 농부 클라이언트가 "녹색 사과를 모두 찾고 싶어요" 라는 요구사항을 보내왔다. 우리는 filterGreenApples 메서드에 GREEN.equals(apple.getColor()) 조건을 통해 녹색인 사과를 찾아 요구사항을 만족했다. 하지만 다음 날 농부 클라이언트는 "무게가 150g 이상인 사과를 모두 찾고 싶어요" 라는 요구사항 수정을 보내왔다. 우리는 다시 filterApplesByWeight 메서드를 작성해 요구사항을 만족했다. 바로 다음 날 농부 클라이언트는 "무게가 150g 이상인 빨간 사과를 모두 찾..
변경에 있어서 자유롭지 못 한 클래스는 분리해야한다. 문제는 클래스 안에서 변경의 이유를 찾는 것이 생각보다 어렵다는 점이다. 코드를 통해 변경의 이유를 파악할 수 있는 첫 번째 방법은 인스턴스 변수가 초기화 되는 시점을 살펴보는 것이다. 응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화하는 반면, 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화하고 일부는 초기화되지 않은 상태로 남겨진다. 함께 초기화되는 속성을 기준으로 코드를 분리해야한다. 코드를 통해 변경의 이유를 파악할 수 있는 두 번째 방법은 메서드들이 인스턴스 변수를 사용하는 방식을 살펴보는 것이다. 모든 메서드가 객체의 모든 속성을 사용한다면 클래스의 응집도는 높다고 볼 수 있다. 속성 그룹과 해당 그룹에 접근하는 메..
나는 지금까지 서비스를 개발하기 위해 설계할 때 데이터 위주로 설계했던 것 같다. 필요한 객체들과 그 필드 값들을 미리 생각하고 설계한 뒤 책임을 부여하는 방식이다. 그렇게되면, 고립된 객체의 상태에 초점을 맞추기 때문에 캡슐화를 위반하기 쉽고, 결합도가 높아지며 응집도가 낮아질 확률이 높다. 그럼 코드를 변경하기 어려워지고 유지보수가 힘들어지게 된다. 책 오브젝트에서는 이러한 문제점을 해결하기 위해서는 데이터가 아닌 책임에 초점을 맞추어야 한다고 말한다. GRSAP 패턴을 사용하면 책임 할당의 어려움을 해결하기 위한 답을 준다고 한다. 책임 주도 설계를 위해서는 다음의 두가지 원칙을 따라야 한다. 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 데이터보다 행동을 먼저 결정하라. ..
🐥 제네릭이란 무엇일까 ? 제네릭이란 컴파일 타임에 타입을 체크함으로서 코드의 안정성을 높여주는 기능입니다. 🐣 제네릭은 왜 사용할까 ? 제네릭을 사용하면 컴파일 타임에 강력한 타입 검사와 형 변환을 없앨 수 있다는 장점이 있다. 자동으로 개발자가 의도한 대로 설계할 수 있다는 장점이 있다. List strList = new ArrayList(); strList.add("string"); strList.add(1); String result = (String) strList.get(0) + (String) strList.get(1); //런타임 에러 List genericList = new ArrayList(); genericList.add("string"); genericList.add(1); //컴파..