To start from scratch, move on to Set up the project. 1. Create the directory structure In a project directory of your choosing, create the following subdirectory structure; for example, with mkdir -p src/main/java/hello on *nix systems: 1, mkdir -p src/main/java/hello 2, src/main/java/hello/HelloWorld.java vi src/main/java/hello/HelloWorld.java package hello; public class HelloWorld { public st..
1. 필요한 클래스의 행동을 생각한다. * 클래스 이름이 중요한 이유 객체지향 프로그래밍은 '이해하기 쉽다'는 것이 장점 중의 하난입니다. 현실세계의 '사물'의 특징이나 동작이 '클래스'로 표현되기 때문입니다. 그러나 정말로 이해하기 쉽게 하려면 클래스의 이름이 중요합니다. 그러므로 누구라도 그 클래스의 역활을 쉽게 상상할 수 있는 이름을 붙이도록 주의해야 합니다. * 클래스를 찿는 법 - 사양서 등에서 기능과 역활을 가진 '명사'를 찿는다. 이 명사가 클래스 후보가 된다. - 명사는 중복되는 경우가 있으므로, 중복되는 것은 제거한다. - 값으로 표현할 수 있는 것은 후보에서 제외한다. - 환경도 후보에서 제외한다. 단, 값이나 환경일지라도 클래스가 되는 경우도 있습니다. 2. 메인 처리의 기본 구조를 ..
DIP (The Dependency Inversion Principle, 의존 관계 역전의 원칙) Note DIP는 의존 관계 역전이라는 어려운 단어로 해석되고 있지만 실상은 간단하다. 구체화된 클래스를 추상화된 interface 또는 abstract 클래스의 구현 또는 상속 구조로 만들어서 실제 사용할 때 다음과 같은 코드로 사용하는 것으로 이해하면 좋을 것 같다. IFactory factory = new CheeseFactory(); 위에서 CheeseFactory는 IFactory 인터페이스를 구현하고 있음을 가정한 코드이다. 별로 신통해 보이지는 않지만 치즈공장에 버터공장, 마가린공장 등이 생겨났을 때 추상화된 클래스 타입으로 코드를 구성하는 것이 얼마나 도움이 되는지 확인할 수 있다. 위키피디아..
LSP (Liskov Substitution Principle, 리스코프 치환의 원칙) Note LSP는 자식 타입들은 부모 타입들이 사용되는 곳에 대체될 수 있어야 한다는 원칙이다. 즉 부모 클래스가 사용되는 곳에 자식 클래스로 치환 하더라도 문제가 없어야 한다는 의미이다. 여러가지 의미로 생각 해 볼수 있다. 상속받는 자식 클래스는 부모 클래스의 책임을 넘지 말아야 한다는 의미와 자식으로서 제공하는 기능에 대한 제약의 의미 등 제한적인 의미를 말하기도 하고, 사용상의 난해함으로 고생하지 말라는 교훈적인 의미를 말하기도 한다. 파생 클래스 마다 쓰임새가 다르다고 사용법까지 모두 다 다르다면 얼마나 복잡할 것이며, 왜 상속이라는 고수준의 구현 방법을 사용하는가?(게다가 고가의) 파생 클래스의 활용도를 높..
SRP (Single Responsibility Principle, 단일 책임의 원칙) Note 단일 책임의 원칙은 함수나 메소드를 개발할 때의 바람을 객체 차원에서 가지게 될 때 제대로 지켜질 것이다. 우리는 함수나 메소드를 개발할 때 하나의 함수가 하나의 동작에 대해 책임을 다하기를 바랄 것이다. 마찬가지로 우리는 하나의 객체가 단 하나의 "객체" 로서의 책임을 다 할 수 있도록 해주어야 한다. 추상적인 책임이 아닌 시스템 상에서의 책임을 의미함에 주의하자. 데이터를 "저장"하는 책임이라는 추상적인 의미로 객체에 책임을 부여했을 경우를 생각해보자. 단지 저장하나에 대한 책임을 주었음에도 불구하고, 해당 객체는 하나의 객체가 가지는 책임의 범위를 넘어서는 형태가 될 수 있다. 3-1의 그림에서 보듯이 ..