본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생-DRY

 

  1. DRY(Don't Repeat Yourself)

여지껏 무수히 많이 설명했고 유별나게 많이 언급되는 규칙들이 있다. 낮은 결합도와 높은 응집도, 클래스는 하나의 일만 해야 된다. 중복되는 코드는 하나로 통합한다. 등의 규칙들이다. 마치 먼지하나도 용서하지 못하는 결벽증 환자처럼 이런 규칙들을 강조한다. 그러나 다행인것은 객체지향 디자인 원리와 상속과 폴리모피즘등의 객체지향 요소를 잘 활용하면 이런 결벽증같이 강조하는 규칙들을 저절로 지킬수 있다는 점이다.

 

중복되는 코드는 하나로 통합한다. 를 객체지향 개발에 맞게 풀어쓰면 공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복코드를 피하라. 라고 얘기한다. 이것이 DRY라는 반복 금지의 원리이다. 하나의 요구사항은 한곳에 두어야 한다는 원리이다. 프로그램에 존재하는 각 정보와 기능을 말이 되는 하나의 장소에 두라는 원리이다. OAOO(Once And Only Once) 만약 어떤 코드나 기능이 그 프로그램 내에서 분명하고 유일한 주체성을 가진다면 같은 내용의 코드가 다른 부분에 존재해서는 안된다. 라는 얘기와 똑같다.

 

만약 중복되는 코드가 다른 클래스에도 존재한다면 이 경우는 마치 나와 똑같은 사람이 복제되어 다른 곳에서 사회생활하는 것과 같다. 나와 똑같은 사람이 복제되어 사회생활하고 있다고 상상해보자. 주민센터에 등록된 거주지는 어느 사람에게 맞출것이며 카드값 명세서는 누구에게 보낼것인지 크나큰 혼란이 생긴다. 복제된 당사자도 피해보지만 공공기관도 피해를 본다.

 

프로그램 내부도 마찬가지이다. 중복된 코드가 존재한다면 이 코드를 사용하는 클라이언트 클래스들은 일단 어느 코드를 사용해야될지 혼란스러워 한다. 만약 개발자가 이 중복된 코드를 동시에 관리하지 못하고 하나의 코드만 관리한다면 다른 코드는 이미 요구사항을 제대로 반영하지 못하는 경우가 발생할수도 있다. 사람으로 따지면 복제된 사람에게 동시에 밥먹여주기가 힘든것과 마찬가지이다. 그렇게 되면 두 코드를 골고루 사용하는 클라이언트 클래스중 일부는 이미 잘못된 코드를 사용하기 때문에 고장을 발생시킬 수 있다. 복제된 코드도 사용하는 클래스도 이들을 탄생시킨 개발자도 모두 피해를 보는 것이다.

 

그래서 Don't Repeat Yourself 반복 금지의 원리이다. 공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복 코드를 피하라. 부모 타입들이 사용되는 곳에 대체되야 한다.

 

 

(SOLID D 사실 DIP(Dependency Inversion Principle) 의존관계 역전 원칙을 뜻하기도 한다. 구체적인 클래스 대신 추상적인 클래스에 의존하라는 뜻이다. DIP 뜻은 이해하기 쉽다.

 

예를들어, ArrayList list = new ArrayList() 대신에 List list = new ArrayList()라고 하는 것이 좋다는 뜻이다.)

 

 

 

 

 

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.