본문 바로가기
IT/Knowledge

객체지향 디자인 패턴 심화 정리 part.2

by 성준하이 2022. 3. 12.
반응형

part.1에 이어서 이번 포스팅에서 다뤄볼 패턴은 다음과 같다.

 

  • adapter
  • proxy
  • facade
  • template method
adapter

말그대로 어댑터를 생각하면 편하게 이해할수 있다.

우리나라에서 사용하던 가전기기를 해외에서 사용을 하려면 어댑터를 챙겨가곤 한다.

어댑터는 형식이 다른 둘 사이에 연결이 되어 그 둘을 연동할때 사용을 해주게 된다.

이걸 프로그래밍에 입혀보면 인터페이스가 다른 객체를 같은 형식에서 사용할수 있게 하는 디자인이다.

외부에서 받아오는 코드를 자신이 만들어둔 클래스에 입히게 되는데 외부에서 받아온 코드는 지금 짜여진 코드와 형식과 변수 등등 모든것이 다를것이다.

이 외부 코드 하나만을 위해서 내부 코드를 바꾸거나 디자인 변경은 비효율적인 작업이다.

그림으로는 다음과 같이 실행이 된다.

 

proxy

다음은 프록시 패턴이다.

프록시의 뜻은 대리, 대리인 의 뜻이다.

프록시 서버도 인터넷 접근하는 서버를 프록시로 다른 주소를 대신해서 접근하는것처럼 패턴도 마찬가지 이다.

클래스도 가벼운일을 하는 클래스가 있고 중요한 일을 하는 클래스가 있다.

가벼운 일은 대리 클래스를 만들어서 대리에서 처리하도록 하는 패턴이다.

예를 들어 유투브를 들어가면 여러개의 영상이 배열에 맞춰서 제목과 썸네일 사진이 나온다.

그리고 만약 그 영상 위로 마우스 오버를 하게 되면 동영상이 재생이된다.

여기서 썸네일과 제목을 불러오는건 프록시를 통해서 진행을 하고 메인 영상이 틀어지는것은 메인 클래스에서 진행을 하는것이다.

모든 영상을 페이지 로딩과 동시에 영상을 실행해버리려고 하면 많은 네트워크의 자원부터 시작해서 소요되는 시간이 아주 오래걸릴것이다.

그래서 가볍게 이미지와 제목 정도만 로딩을 해주고 메인 클래스는 언제든지 프록시 뒤에서 대기하고 있다가 실행이 될 준비를 하게 된다.

 

facade

아마 프로그래밍을 해보신 분들이라면 정의를 몰라서 그렇지 사용해본적은 있을것이라고 생각한다.

여러 클래스를 복잡하게 혼합해서 사용해야 수행이 되는 작업들이 있는데,

만약 내 주소를 찾는 코딩을 짜보면 Geolocation 에서 좌표를 받아오고 인터넷에 연결을 하여 주소를 알고 인터넷 연결 종료하고,

json 형태로 받아온 값을 파싱하는 과정 등 많은 각각의 작업들을 수행하는 클래스를 하나 만들것이다.

클래스를 보면 어디서는 이 클래스를 호출하고 또 어디서는 저 클래스를 호출하는 등의 작업으로 코딩은 이루어져간다.

만약 그렇지 않다면 하나의 페이지에서 다 만들고 호출하고 또 다른곳에서 똑같은 작업을 해야한다면 그 클래스 안에서도 만들고 종료하고 등등 너무 비효율적이다.

이것을 facade패턴이라고 한다.

 

template method

어떤 같은 형식을 지닌 특정 작업들의 세부 방식을 다양화 하고자 할때 사용되는 패턴이다.

예를 들어보면 방금 했던 facade에서 지도를 받아오기 할 때 네이버 지도와 카카오 지도 두개의 탭을 만들어놓고

그 탭을 누르면 좌표를 받아와서 지도로 보여주고 현재 내 위치를 점으로 찍는 명령을 추상클래스로 만들어 둔다고 하면

네이버지도로 보든 카카오지도로 보든 내가 해야하는일은 동일하게 된다.

그럼 네이버지도에서도 만들어둔 추상클래스를 상속을 받고 카카오지도 클래스에서도 상속을 받은후 각각의 api에서 사용될 클래스를 호출해주면 된다.

결국 자식 클래스에서 부모에서 받은 기능을 오버라이딩 하여 자식에서 자신만의 스타일로 구현을 한다.

반응형

댓글