분류 전체보기
-
켄트 벡의 구현 패턴 - 설계My-Book(History) 2016. 11. 10. 18:53
인터페이스 - 클라이언트에게 제공할 때의 이점은 세부 사항을 가급적 적게 드러낸다. - 클라이언트 클래스가 여러 인터페이스를 동시에 구현할 수 있다. - 여러 개의 연관된 인터페이스를 하나의 클래스에서 구현하는 것은 명확하고 직접적인 커뮤니케이션을 돕는다. 상위클래스 - 상위클래스에 새로운 메소드를 추가해도 호환성에 문제가 발생하지 않는다. - 클라이언트에게 공개되는 상위클래스의 세부 사항은 공용 및 보호 메소드와 필드이다. 하지만 공개되는 내용들은 변화되지 말아야한다. - 가급적 클래스에서 노출하는 세부 사항을 줄여서 인터페이스에서 노출하는 정보 수준에 가깝게 하라 abstract 키워드 - 기본 메소드 구현을 제공해주면 클라이언트가 좀더 쉽게 클래스를 사용할 수 있다. 그러나 상위클래스에 새로운 추상..
-
켄트 벡의 구현 패턴 - 메소드My-Book(History) 2016. 10. 29. 21:09
조합 메소드 - 켄트 벡은 전체 구조를 읽을 때는 긴 메소드를 사용하는것을 좋아한다. 하지만 세부 사항을 이해하려 할 때, 긴 메소드는 오히려 방해가 되므로 밀접하게 관련된 코드만 모아놓고 관련성이 떨어지는 코드는 분리하는 편이다. - 메소드를 구성할 때는 추측이 아닌 사실에 근거하라. ( 일단 동작하는 코드를 만들고 구성 방식을 결정하라) - 켄트 벡은 로직을 나누고 난 뒤 코드를 읽기 어려운 경우 모든 메소드를 인라인시켜서 커다란 메소드를 만든 후메소드 구현에서 새로 얻은 경험을 바탕으로 다시 메소드를 나누는 방법을 사용한다. 의도 제시형 이름 - 메소드의 이름을 지을 때는 그 메소드를 호출하는 입장에서 생각해서 지어라. - 왜 이 메소드를 사용해야 하는가? 메소드 이름에서 이 질문에 대한 답을 얻을..
-
켄트 벡의 구현 패턴 - 행위My-Book(History) 2016. 10. 29. 19:06
설명 메시지 - 메소드를 호출시 직접 적으로 해당 메소드를 호출해도 되지만 프로그래머의 의도를 전달하기 위해 메소드를 한번더 감싸서 호출한다.ex) highlight (Rectangle area) {reverse(area);} - 한 줄로 된 코드에 주석을 부티고 싶은 경우라면 설명 메시지 사용을 고려하라.ex )flags |= LOADED_BIT; // 로드 비트를 설정 -> setLoadedFlag(); 위 예제와 같은 메소드의 구현이 하는일은 없다 하지만 이러한 한 줄 짜리 메소드는 커뮤니케이션을 돕는다. 보호절 - 간단한 지역적 예외 상황을 지역적인 변화만을 수반하며 표현할 수 있다. ex) 안좋은 예)void compute() {Server server = getServer();if(server..
-
켄트 벡의 구현 패턴 - 상태My-Book(History) 2016. 10. 18. 19:06
직접접근 - 데이터를 가져오거나 저장하는 것을 나타내는 가장 간단한 방법은 직접 변수를 사용하는 것이다.- 명확성이 높아지나 수정해야하는곳이 많아지게 된다.- 켄터 벡 이 말하고자하는것은 프로그래머라면 커뮤니케이션하고 ㅂ 얘기하고자 하는것인거 같다. 간접접근 - 접근자 메소드를 사용하면 명확성과 직접성을 희생해서 유연성을 얻을 수 있다. 공용상태 - 여러 연산에서 같은 데이터 요소를 사용하는 경우가 많다. 이런 경우는 클래스에 필드를 선언해서 사용하는 것이 좋다. ex) class Point {int x;int y;} - 각 객체의 공용 상태는 모두 범위와 생명기간이 같아야 한다. 가변상태 - 인스턴스에 따라 각각 다른 데이터 요소를 필요로 할때 데이터를 맵 형식으로 표현한다.- 공용상태에 비해 훨씬 유..
-
켄트 벡의 구현 패턴 - 클래스My-Book(History) 2016. 10. 14. 17:13
단순한 상위클래스 이름 - 메타포 를 사용하자 ( 메타포란 사용을 쉽게 하기 위한 메뉴, 아이콘등이 가장 대표적인 메타포라고 말할 수 있습니다 ) 한정적 하위클래스 이름 - 상위 클래스로 부터 상속을 받았다는 것을 알리고자 클래스명 뒤에 Handle 과 같은 명칭을 사용하자 추상 인터페이스 - 인터페이스를 통해 유연성을 얻을 수 있는 경우에만 인터페이스에 비용을 지불해야 한다. 버전 인터페이스 - 최초 설계한 메소드를 많은 클래스가 구현하고 있는경우 새로운 메소드를 확장하기 어려운경우 아래 예제를 이용하자( extends를 사용해야한다는건 알지만 나중에 이글을 읽을때 다시 복습하기 위해서다) ex) 1. 최초 interfacec Command { void run(); } 2..확장 interface Re..
-
켄트 벡의 구현 패턴 - 프로그래밍 이론My-Book(History) 2016. 10. 14. 15:34
단순성 - 프로램을 최대한 단순화하라 - 의미 없는 코드는 모두 제거하라. - 설계 시 에도 고도한 요소는 모두 빼고, 요구 사항을 분석해서 꼭 필요한 사항만을 뽑아내라. - 과도한 복잡도를 제거하면 코드를 새로운 관점에서 바라볼 수 있다. 유연성 - 프로그램은 유연해야 하지만, 프로그램이 발전하는 방향으로 유연해야 한다. - 추측에 의거해 설계에 유연성을 부여하는 것보다는 단순성을 유연하게 적용한 후 테스트를 철저하게 하는 편이 더욱 효과적이다. - 유연성이 있으면서도 당장 이득을 얻을 수 있는 패턴을 사용하라. - 당장 비용이 들어가지만, 앞으로 이득을 얻을 수 있을지 불확실한 패턴의 경우에는 일단 사용을 자제하는 편이 좋다. 구현 패턴의 근간이 되는 원칙 1. 지역적 변화 : 코드를 수정할 때 함께..