OCP (Open-Closed Principle, 개방폐쇄 원칙) Note 열려 있어야 할 곳(확장)에는 열려 있어야 하고, 닫혀 있어야 할 곳(변경)에는 닫혀 있어야 한다는 원칙. 쉽게 말하자면 확장은 가능하되 변경은 하지 않는 구조로 구성되어야 한다는 원칙이다. 어떻게 만들든 이미 만들어진 코드를 수정하지 않고 상속 받아서 처리하면 OCP가 만족되지 않을까? 그것만으로는 원칙을 지켰다고 말하기는 어려울 것 같다. 객체 지향 5원칙은 개인적인 견해로 개발을 위한 원칙이라기 보다는 설계를 위한 원칙이라 생각한다. 개발 진행 중에 클래스를 수정해야 할 상황이 생겨버렸고, 변경은 하지 않는게 원칙이라고 하니 확장해버리자( = 상속받아서 처리해 버리자). 라는 것은 의도에 맞지 않는 행동이라는 것이다. Log..
ISP(인터페이스 분리의 원칙) Note 인터페이스 분리의 원칙은 기능의 분리로 볼 수 있다. I/O의 기본을 입력과 출력으로 나눈다면 입력이라는 기능과 출력이라는 기능으로 나눌 수 있음을 직관적으로 느낄 수 있다. 이러한 기준은 인터페이스 분리의 원칙에 그대로 적용할 수 있다. 파일의 입력은 Input이라는 인터페이스로 출력은 output이라는 인터페이스로 분리가 가능하다는 뜻이다. 아마도 이렇게 분리된 휼륭한 코드를 본 바 있으리라 생각된다. 자바의 Input, Output API 시리즈가 가장 대표적인 ISP의 표본이지 않을까. 클라이언트가 파일에 Access 하고자 할 때는 입력과 출력을 염두에 둘 것이다. 하지만 대부분의 경우 입력 설계와 출력 설계가 항상 함께이지는 않을 것이고, 사용하지도 않..
정규 표현식은 문자열에서 문자 결합을 일치시키는데 사용되는 패턴이다. JavaScript에서, 정규 표현식은 또한 객체이다. 이들 패턴들은 RegExp의 exec와 test 메소드들, 그리고 String의 match, replace, search, split 메소드들과 함께 사용된다. 이 章은 자바스크립 정규 표현식(JavaScript regular expressions)을 설명한다 JavaScript 1.1과 이전 버전. 정규 표현식은 JavaScript 1.1과 그 이전 버전에서는 사용할 수 없다. 정규 표현식 생성 (Creating a Regular Expression) 정규 표현식은 두 방법 중 하나를 사용하면 생성된다: 객체 초기화(object initializer) 사용, 다음처럼: re = ..
//interface interface Ingredient { function createSugar(); function createCream(); function createMilk(); } // ingredient class SeoulIngredient implements Ingredient { function createSugar() { return new blackSugar(); } function createCream() { return new Cream(); } function createMilk() { return new Milk(); } } class JejuIngredient implements Ingredient { function createSugar() { echo "Jeu Suga..
interface Duck { function quick(); function fly(); } class JDuck implements Duck { function quick() { echo "Quick"; } function fly() { echo "Fly"; } } interface Chil { function goole(); function fly(); } class JChil implements Chil { function goole() { echo "GGGGGGG~~~~~"; } function fly() { echo " -|- "; } } class DuckApter implements Duck { public $_chil; function __construct($chil) { $this->_..