336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
디자인 패턴이라고하면 특별한 상황에 이렇게 하는게 좋더라 라고 패턴화된 내용입니다.
객체가 하나만 생성되고 생성된 객체를 같이써야할때는 싱글턴
객체의 내용변화를 감시해야할때는 옵저버패턴
이미사용중인 소스의 메소드명 클래스명을 변경하고싶을때는 아답터패턴등이 예입니다.
디자인패턴은 말그대로 그상황에 이렇게 코딩하는 하나의 패턴을 얘기하므로
개발자분들이 이런상황에서 이렇게쓰고있는 패턴이있으면 그것또한 하나의 디자인패턴입니다.
아직이름이 알려져있지 않을뿐이죠.
디자인패턴을 책에 나오는 그대로쓰는경우도 있지만 상황에 맞게 변형해서 쓰는 경우가 더많습니다.
우리보다 선대개발자들은 이런상황에서 이렇게 개발했다고 잘정의해놓은 개발자 필수공부 내용이니까
꼭 공부해보길바래요~
아래는 OOP와 디자인패턴의 관계를 잘설명해놓은 포스팅이있어서 퍼왔어요
http://blog.naver.com/2feelus/220642212134
자바 OOP와 디자인 패턴 - Java OOP and Design Pattern
1. OOP 란?
Object Oriented Programming은 프로그래밍 방법론으로 기존의 절차적, 파일단위의 프로그래밍 스타일에서,
완전히 분리된 프로그래밍의 단위인 Object(객체)라는 개념을 가지고 와서 프로그래밍의 방법을 객체간의 소통의 개념으로 가져왔다.
사실상 우리가 보는 세계는 많은 것들이 분리된 단위로 떨어져 독립적으로 존재하고, 커다란 객체는 여러 객체의 조합으로 나타낼 수 있다.
이런 객체의 개념은 아래의 몇단어로 상징적으로 표현된다.
1) abstraction (추상화)
- 여러 객체들의 공통된 특성을 묶어 상위개념으로 표현하는 것 : 예 ) 남자 와 여자의 추상적 객체 = 사람
2) Polymorphism (다형성)
- 객체를 표현하는 다양한 방식이 존재할수 있다. 예) 자식객체는 자식객체와 부모객체, 혹은 인터페이스로서 참조할수 있다.
3) Encapsulation(캡슐화, 은닉화)
- 숨길 부분과 밖으로 드러낼 부분을 조절할수 있다. 예) private 필드
4) Inheritance (상속성)
- 부모객체를 상속해서 자식객체를 만들수 있다 예) extends 키워드
자세한 설명은 인터넷에 좋은 설명들이 많다.
2. Java와 OOP
Java에서 OOP(객체지향 프로그래밍)은 뗄래야 땔수 없는 이름표와 같다. Java가 OOP의 원조는 아니지만 현재 지구상에서 가장 많은 사람들이 사용하는 객체지향언어이다. 다른 OOP언어로서 대표적으로 C++, LISP, C#,Scala등의 OOP를 기반으로 태어난 언어들, 그리고 여러 스크립트 언어들도 최신버전에서는 OOP의 개념을 지원한다. (PHP, Python,ruby등...)
3. Java은 완벽한 OOP인가?
자바는 '거의' 완벽한 OOP이다. 약간은 OOP에 부족한 면이 있다는 뜻이다.
OOP의 개념중에는 multiple inheritance(다중상속)이라는 개념이 존재한다. 관계가 없는 두 클래스를 상속해서 자식클래스를 만드는 것을 뜻한다.
c++나 LISP, scala등에서는 다중상속을 지원하지만, java나 C#은 이를 지원하지 않는다. 그 이유는 다중상속은 같은 이름을 가진 부모클래스의 메소드들에 대해 어떤 것을 선택할 것인지 애매하기 때문이다. 이는 생성자에 대해서도 마찬가지이다. 이런 모호성(ambiguity)는 좀더 명확한 의미를 가진 클래스디자인을 힘들게 하는 요인이기도 하다. 그래서 언어에 따라 다중상속을 지원하지 않는 경우가 존재하다. 자바의 경우는 강한 타입 캐스팅을 통해, 실제 수행전에 에러를 잡는데에 최적화된 언어이므로, 이를 위해서 가능한 모호함의 요소들은 제외를 하고자 했다. 그래서 자연스럽게 다중상속성은 포기하게 되었다. (1995년에 Java:an Overview" 라는 글에서 자바의 아버지인 James Gosling이 의견을 밝혔다). 앞으로 나올자바에서도 다중상속이 지원될 확률은 거의 없다고 볼수 있다.
주) 참고로 Java 8에서는 Interface 의 default method라는 방식으로 우회적으로 다중상속과 비슷한 방식을 지원하기는 한다. 하지만 이것 또한 진정한 의미의 다중상속은 아니다. 링크참고
4. 디자인 패턴 (Design Patterns) 이란?
오랜동안 많은 사람들에 의해 좋다고 검증된 프로그래밍 패턴. 사람들이 수많은 시간동안 프로그램으로 여러 형태의 문제들을 해결해왔는데,
문제의 타입별로 해결하기 좋은 프로그래밍 패턴들이 있다는 것이 알려졌고, 여기에 이름들이 붙여졌다. 주로 많이 알려진 디자인 패턴은 아래와 같다.
1) 생성 패턴
- 추상 팩토리 패턴
- 빌더 패턴
- 팩토리 메서드 패턴
- 싱글톤 패턴
2) 구조 패턴
- 어댑터 패턴
- 브리지 패턴
- 컴포지트 패턴
- 데코레이터 패턴
- 파사드 패턴
- 프록시 패턴
- 플라이웨이트 패턴
3) 행위패턴
- 책임 연쇄 패턴
- 반복자 패턴
- 중재자 패턴
- 전략 패턴
- 커맨드 패턴
- 방문자 패턴
- 인터프리터 패턴
- 메멘토 패턴
- 옵저버 패턴
- 상태 패턴
- 템플릿 메소드 패턴
- 널 오브젝트 패턴
5. 객체 지향과 디자인 패턴의 관계
디자인 패턴이란 용어자체는 OOP와 직접적인 관련은 없다. 디자인 패턴이라는 말 자체는 어떤 프로그래밍 방법론에도 사용될 수 있다.
그러나 OOP라는 프로그래밍 방식은 Design Pattern이라는 프로그래밍 방식과 매우 잘 어울리며 실제로 거의 함께 쓰이곤 하는 용어이다. 그 이유는 객체(Object)라는 개념이 가진 "변화적인 성질(변이성)" 때문이다. 일반적으로 객체라는 것은 때에 따라 생성되고, 객체의 성질이나 값을 부여받고, 스스로 일들을 수행하고, 다른 객체에게 값을 전달해준뒤, 소멸한다. 즉 메모리에 태어났다가, 변경되고, 소멸된다. 이런 변이성은 Design Pattern에서 가장 많이 언급되는 아래의 방법론과 매우 잘 어울린다.
생성패턴 = 객체의 생성에 대한 방법
구조패턴 = 객체와 객체 사이의 상속/조합 관계설정 방법
행위패턴 = 객체가 특정 행동을 함으로서 다른 객체에 값을 전달하는 방법
사실 디자인 패턴이라는 말이 유명해진 계기가 GOF(Gang Of Four - 4명의 깡패들) 이라는 사람들이
Design Patterns: Elements of Reusable Object-Oriented Software
이라는 책을 내면서 Design Pattern이라는 용어가 급부상해서, 이제는 Design Patterns이라고 하면 OOP를 빼놓고 얘기할 수가 없게 된것이다.
책의 제목에서 Reusable 이라는 말에 주목할 필요가 있다. 디자인 패턴은 효율적이며 가독성이 높은 코드를 지향할 뿐 아니라,
항상 재사용성이 높은 코드를 염두에 두고 있다는 부분이다. 절차적 프로그래밍에서도 효율적이며 가독성이 높을수는 있지만, OOP에서의 디자인 패턴은 재사용성과 그를 바탕으로한 관리용이성 또한 염두를 두고 있다.