-
[STUDY02]MVC 패턴과 기타 등등의 패턴FISA 2025. 12. 31. 19:10
서담으로... 분명히 패턴에대한거 소공시간에 배웠고...
저번에 플젝 하나 하고나서 이건 어떤 패턴이구나! 정리까지했는데
기억못하는게 진짜 돌머리같아서 ;;;;;;;;;;슬프다
우선 궁금증은
⁉️ MVC패턴이 단순히 View Controller Model아냐? 근데 내가 이해한 코드가 Template Pattern이라고?
⁉️ 디자인 패턴이 몇개나 있는데... 그리고 내가 짠 코드가 JPA MVC인가?
⁉️ 왜 Template 패턴에서 interface를 쓰지않고 추상클래스를 쓰는가
우선 MVC에대한 용어자체는 진짜 알겠음.
Model - View - Controller를 나누어 테스트/유지보수를 쉽게하는 구조로 짠다는것.
그럼 TemplatePattern은 뭔가?
알고리즘의 뼈대는 고정하고 세부 단계만 자식이 바꾸게 하는 패턴!!!!!
아니 나진짜 이거 처음들었음
난 그냥... View이런거 있으면 무조건 MVC 파블로프의 개마냥 찾았는데
이게 ....이게 ... 따로있는거였음
근데 지삐띠니 형님 왈.
MVC와 Template Method는 같이 자주 쓴다고 한다.
지금 구조를 “콘솔 MVC”로 해석하면 이런 식입니다.
- MissionView / Login 같은 클래스들: View 계층
- MissionController: Controller 역할
- login(id,pw) 로직이 커지면: Service/Model로 분리하는 것이 다음 단계
즉 지금은 View와 Controller가 단순해서 한 파일 안에 섞여 있는 초기 단계이고,
규모가 커지면 MVC 분리 효과가 크게 납니다.라는데!!이거 예제같은경우엔 다음 글에 적겠음. 내가짠거아님....... 제4의팀원 클로드와 팀원 형님들이 짜주셨다.
디자인 패턴의 큰지도는
생성 패턴
- Singleton: 인스턴스 1개만 보장
- Factory Method / Abstract Factory: 생성 책임을 분리
- Builder: 복잡한 객체 생성 단계화
구조 패턴
- Adapter: 인터페이스 맞추기(레거시 연결)
- Facade: 복잡한 하위 시스템을 단순 API로 감싸기
- Decorator: 기능을 동적으로 덧붙이기(래핑)
행위 패턴
- Template Method: 흐름 고정 + 단계만 위임
- Strategy: 알고리즘을 통째로 갈아끼우기(상속이 아닌 합성)
- Observer: 이벤트 구독/알림
- Command: 요청을 객체로 캡슐화(Undo/Queue에 강함)
- State: 상태에 따라 행동이 달라지는 로직을 객체화
그래서 예시를들어보자면
행위패턴이 전체적인 구조니까 한번 바꿔가며 해보겠다.
templateMethod패턴같은 경우엔
흐름은 부모가 고정하고, 세부 로직은 자식이 결정하는 방식이다. 그리고 "상속"기반이다.
흐름을 가지는 부모 클래스는 abstract로 정의해준다.
<흐름을 가지는 부모 클래스>
public abstract class LoginTemplate { // Template Method public final boolean login(String id, String pw) { if (!checkFormat(id, pw)) return false; return authenticate(id, pw); } protected boolean checkFormat(String id, String pw) { return id != null && pw != null; } // Hook Method (자식이 구현) protected abstract boolean authenticate(String id, String pw); }Template Method의 핵심은 !@@ 추상클래스 @@!인것같다.
말로만 이걸 지켜라 ~ 하는 건 의미가없음.
컴파일러단에서 너희는 이 틀을 거쳐야해...하는 의미로 강제로 공유한다는것이다.
또 하다가 구조를 까먹을 수도 있음.
구현하지 않으면... 예를들어 view같은 메서드를 구현하지 않으면 컴파일 에러를 일으키게 하기 위해서 ! 하는것이다.
그리고 왜 interface를 사용하지않는가?에 대해...말하자면
인터페이스는 흐름@@@@@을 고정하진 않는다. 아래에서 자세히 다루겠지만 final유무가 큰 것 가다.
또 정의 자체가
알고리즘의 뼈대는 상위 클래스에 정의하고
세부 단계는 하위 클래스에 위임한다.이기때문에 이 문장 자체가 ""상속""이란 뜻임. 이걸 안전하게 만드는게 추상클래스 + final메서드란것이고.
<그리고 기능(세부 로직)을 가지는 로그인 로직>
public class CustomerLogin extends LoginTemplate { @Override protected boolean authenticate(String id, String pw) { return "user".equals(id) && "1234".equals(pw); } }<실제 사용>
LoginTemplate login = new CustomerLogin(); boolean result = login.login("user", "1234");보면 "로그인"이라는 행위는 바뀌지않고, 주체만 바뀐다.
그래서 큰 틀(로그인이라는 행위)를하는 부모를 추상으로 해주고 extends받아서 세부로직을 짜주는 것.
public interface LoginStrategy { boolean authenticate(String id, String pw); }public class CustomerLoginStrategy implements LoginStrategy { @Override public boolean authenticate(String id, String pw) { return "user".equals(id) && "1234".equals(pw); } }public class ManagerLoginStrategy implements LoginStrategy { @Override public boolean authenticate(String id, String pw) { return "admin".equals(id) && "9999".equals(pw); } }실행자
public class LoginService { private LoginStrategy strategy; public LoginService(LoginStrategy strategy) { this.strategy = strategy; } public boolean login(String id, String pw) { return strategy.authenticate(id, pw); } }사용
LoginService service = new LoginService(new CustomerLoginStrategy()); boolean result = service.login("user", "1234");이건 알고리즘 자체를 객체로 분리하여서 상속보단 합성에 가깝다.
조각조각 만들어서 조합하는식. 근데 여기에서도 @override쓰긴한다.
2. 추상클래스 vs 인터페이스 (핵심 차이)를 보시겠습니다...
구분abstract classinterface목적 공통 흐름 + 일부 구현 공유 역할/기능 규약 정의 핵심 키워드 상속(inheritance) 구현(implements) 알고리즘 흐름 가질 수 있음 가질 수 없음 필드 인스턴스 변수 가능 상수만 가능 상태(state) 가질 수 있음 가질 수 없음 final 메서드 가능 불가 Template Method ✅ 최적 ❌ 부적합 Strategy ⚠️ 가능 ✅ 최적 옵저버 패턴 같은경우엔 하 회피할게요....

야 지삐띠니 좋은말고맙다...지능문제가아니라해줘서...근데 4년동안cs배웠는데 모르는거면 지능문제아닐까...?
728x90'FISA' 카테고리의 다른 글
[회고]1주차_우리FISA 클라우드 엔지니어링 (4) 2026.01.02 [STUDY04] docker layer에 관하여 (0) 2026.01.02 [STUDY03] 코드를 뜯어보자자잣 (1) 2026.01.02 [STUDY01] Static 변수 SingleTonPattern/궁금증 (1) 2025.12.31 우리Fis아카데미 면접 후기+합격 (1) 2025.11.24