본문 바로가기

분류 전체보기31

비지터 패턴 비지터 패턴컴포지트 패턴으로 만들어진 복합 클래스가 있음 (나중에 할건데 그냥 폴더 파일처럼 파일은 폴더의 일부가 될 수 있고 폴더 자신도 다른 폴더의 일부가 될 수 있듯 시스템에 속하는 각자가 서로를 포함하거나 포함시킬 수 있는 녀석. 전체는 하나 하나는 전체)아무튼 이녀석에게 새 기능을 넣고싶음. 모든 서브클래스에 일일히 새 기능 추가하면 힘듦.정보은닉 포기하고 비지터라는 녀석한테 감찰관처럼 한번 여행다니면서 조사해오게 새 기능 추가함. 얘를 보조해주는 트래버서도 만듬(비지터를 확장해서 복합클래스 구조에 맞게 비지터의 기능을 정의)얘의 인자로 복합클래스를 주고 새 함수를 실행시키면 직접 돌면서 정의한대로 정보를 얻고 기능에 맞는 계산을 해서 돌려줌.→ 아파트 전체 호실에 대해서 애완동물 정보 알려주기.. 2025. 5. 11.
플라이웨이트 패턴 플라이웨이트패턴 → 경량화 패턴(격투기 체급중 제일 가벼운거)어떤 클래스의 인스턴스 한개만 가지고 여러개의 가상 인스턴스를 제공하는것맵에 나무를객체형태로 추가하는데, 그냥 x,y좌표를 가지고 있고 나무 수량에 따라 적당한 크기로 화면에 표시되기만 함 객체지향의 기본 원칙: 공통된 것들은 묶는다.공유자원으로 쓰면 메모리가 적게 든다. Tree클래스{멤버변수 : x좌표,y좌표,크기멤버함수 : Display(){ 나무x,y좌표, 크기에 따라 렌더링해줌}} 인데, 이거 수천개 만들면? 무겁다.Tree 객체를 수천개 만드는 대신 트리 인스턴스는 하나만 만들고 모든 나무의 상태를 클라이언트 객체에서 관리하도록 하면? Tree클래스{Display(x,y,나이); // 상태가 저장되지 않은 나무 객체 인스턴스} Tr.. 2025. 5. 11.
미디에이터 패턴 메디에이터 패턴은 중재자 라는 뜻의 패턴인데 복잡한 관계를 싹 정리하는 클래스로 모아 관리하는 패턴이다.스위치 분기가 있고, 스위치에 맞게 뭐 어떤 함수를 호출하거나 어떤 클래스를 호출한다고 하자 이렇게 될 텐데, 마치 하나의 인풋을 여러개로 분기해 주는 역할을 맡는 것 같아 지금은 괜찮아 보인다. 인풋이 하나이기 때문에 아날로그회로의 디코더를 떠올릴 수도 있겠다. 인풋이 int 하나이면 위와 같은데좀더 논리회로와 매치되도록 bool변수 여럿을 인풋으로 받는다고 해보자모시깽이 isOn,inOpen,isEmpry 세개가 있다고 하자. 얘는 상자고, 상자의 상태가 On이어야 이후 행동을 하고, 오픈이 False일때 오픈을 하고, 오픈이 되었으면 이제 Empty가 False일때 플레이어한테 아이템을 준다.온일.. 2025. 5. 11.
파사드 패턴 파사드는 프랑스어로 출입구, 외벽, 겉보기 라는 뜻인데, 이걸 패턴이라고 해야하나 싶을만큼 우리가 잘 쓰고 있다. 사용자에게 복잡한 설계도 대신 개요, 모델하우스만 보여주는것.기본적으로 객체지향 프로그래밍을 할 때도, 어느정도 관련이 있으면 몇 가지 절차적인 메서드를 한 메서드 안에서 실행한다. 길어지면 자연스럽게 이름 붙여서 함수로 뽑아냈다. 바로 이거다.서브시스템을 쉽게 이용할 수 있는 고수준 인터페이스를 지원한다. 그리고 얘는 서브시스템클래스를 아무것도 캡슐화 하지 않기 때문에 그냥 편의적으로 세트실행버튼만 여러개 단 편의성 리모콘 같은 클래스이다.이를테면 거실 전체의 시스템을 통합적으로 조작하는 리모콘.거실환경=영화시청모드 → 거실등1,2,3을 50%로 on, 스피커0,1,2는 100% 서브스피커.. 2025. 5. 11.
어댑터 패턴 어댑터 패턴은 여러 다른 메소드들을 그냥 하나의 컨트롤러로 호출하고 제어하고 싶을 때. 말 그대로 공용 어댑터 같은 걸 제공해주는 패턴.우리에게 익숙한 이터레이터 → 안에 큐가있건 뭐 벡터가있건 뭐 스택이나 배열이 있건, 클라이언트는 이터레이터만 호출하고 0번,1번,2번 차례대로 돌아라! 만 호출하면 됨인큐 디큐 뭐 팝 큐 이런 개별적인 각기 다른 메소드를 부를 필요가 없음! 어댑터인 이터레이터를 통해서 이터레이터야 돌아라! 멈춰라! 만 호출하면 되니까.예시로는 옛날에는 이뉴머레이터라는 컬렉션을 썼는데, has엘리먼트,next엘리먼트만 됨. 즉 읽기전용 인터페이스. 요새는 이터레이터 컬렉션을 쓰는데 has,next,remove()가 됨. 이거 지금 이뉴머레이션이터레이터 라는 어댑터로 호환시킴어댑터는 이터.. 2025. 5. 11.
커맨드 패턴 커맨드패턴 아이디어. 우리는 리모컨만 쓰고싶어. 슬롯은 On/Off 라는 정규 기능만 수행하면 돼이런 인터페이스를 커맨드 인터페이스라고 하고, On/Off만 각각 구현해 준 인풋과 아웃풋을 설계하자.재사용이 가능해지고 뭐가 실행되는지 몰라도 된다!그냥 A.On, A.Off 가 되겠지뭐! 너무예쁘다. 버튼은 excute() 만 한다. On버튼도, Off버튼도.버튼의 역할은 그냥 눌리는것. 끝Off 버튼이 아무것도 없는 그냥 고무덩어리일 뿐이여도 상관없다.전임자가 이 기계는 꺼지면 안돼서 그냥 빼버렸나보지! 라고 생각하면 되는것. 우리는 고객. 주방에서 햄버거를 ‘어떻게’ 조리할지(실행) 는 몰라도 됨. 그냥 API 가져다 쓰는거니까!우리는 그래서 웨이터한테 이거 이거 이거 실행! 만 주문서(커맨드)를 한장.. 2025. 5. 11.