패턴 5

[Kotlin] 클래스 위임과 by, Decorator(데코레이터) 패턴

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 보통 객체지향 시스템을 설계할 때 시스템을 취약하게 만드는 것은 구현 상속(implementation inheritance)에 의해 발생한다. 이와 관련해서는 이 글과 이 글에서 설명한다. 그래서 코틀린은 기본적으로 클래스를 `final` 로 하여 기본적으로 상속을 금지하고 있다.(not `open`) Decorator(데코레이터) 패턴 하지만 종종 상속을 허용하지 않는 클래스에 새로운 동작을 추가해야 할 때가 있다. 이럴 때 사용하는 일반적인 방법이 Decorator(데코레이터) 패턴이다. 이 패턴의 핵심은 상속을 허용하지 않는 클래스(기존 클래스) 대신 사용할 수 있는 새로운 클래스(데..

Kotlin 2024.01.10

[Kotlin] sealed 로 클래스 계층 확장을 제한하기 + 태그 클래스 VS 상태 패턴

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전 글에서 `Expr` 인터페이스와 `Num`, `Sum` 이라는 하위 클래스를 가지고 덧셈을 구현했었다. (이전 글: [Kotlin] enum & when & smart cast(스마트 캐스트) interface Expr class Num(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun evaluate(e: Expr): Int = when (e) { is Num -> e.value is Sum -> evaluate(e.right) + evaluate(e.left) else -> throw Illeg..

Kotlin 2024.01.06

MVC 패턴을 다시 공부해보자

우아한 테크 코스의 프리코스에서 숫자 야구 게임 구현 단계를 진행하고 있었습니다. 이 때 따로 GUI 는 없고 콘솔을 통해서 입력과 출력을 받고 있었습니다. 저는 먼저 한 클래스에 모든 구현을 때려 넣은 후에 리팩토링하면서 각 객체에게 역할과 책임을 분리했습니다. 그런데 프리코스 커뮤니티에서 MVC 패턴에 대한 이야기가 나오더라구요..? 저는 안드로이드 프로젝트만 해왔기 때문에 당연히 따로 View 가 있는 패턴(MVC 나 MVVM 과 같이)을 사용할 생각을 못했었는데 말이죠. 그래서 MVC 패턴을 적용해서 구현한 코드를 리팩토링하려고 했습니다. 그런데 갑자기 조금씩 헷갈리더라군요.. 그래서 MVC 패턴을 어떤 프레임워크에 국한되지 않도록, 조금만 더 자세히 알아보려고 합니다. 참고로 이전에 MVC, M..

MVC, MVP, MVVM 봐도 봐도 조금씩 헷갈리면 모르는 거임

안드로이드에서 유명한 패턴인데 봐도 봐도 조금씩 헷갈리는 것 같아서 제대로 정리를 할 필요성을 느껴 정리합니다. MVC(Model - View - Controller) 패턴 MVC 패턴은 다른 소프트웨어 개발에서 많이 사용되는 디자인 패턴입니다. 당연히 안드로이드 앱 개발에서도 많이 사용됩니다. MVC 패턴은 앱을 세 가지의 주요 컴포넌트로 나누어서 관리하며, 각 컴포넌트는 다른 역할을 수행합니다. Model - MVC Model 은 데이터와 데이터 관련 로직을 포함하는 컴포넌트. 데이터는 앱의 핵심 데이터나 상태. 안드로이드 앱에서의 Model 은 데이터베이스나 네트워크 요청 결과, 앱의 상태 등을 포함할 수 있음. Model 은 주로 데이터를 가져오고 저장하며, 데이터의 유효성 검증을 하고 가공할 수..

Android/Theory 2023.10.02

디자인 패턴 - 프록시 패턴(Proxy pattern) 자바 코드 예시로 보기

먼저 프록시(proxy)의 뜻을 살펴봅시다. 위처럼 proxy 는 대리, 대리인, 대용물 이라는 뜻을 가집니다. 그렇다면 프록시 패턴이라 하면, 누군가가 어떠한 일(역할)을 대신 해주는 모습의 디자인 패턴임을 예상할 수 있겠네요. Proxy pattern(프록시 패턴) 프록시 패턴은 클라이언트가 실제 서비스 객체를 대신하는 객체를 제공해주는 구조 디자인 패턴입니다. 클라이언트의 요청을 수신하고 일부 작업들을 수행한 다음 요청을 서비스 객체에 전달하는 형태이지요. 여기서 일부 작업들에는 흔히 접근 제어, 캐싱 등이 있습니다. 프록시 객체는 서비스 객체와 같은 인터페이스를 가지기 때문에 클라이언트에 전달되면 실제 객체와 상호적으로 교환이 가능합니다. 우리가 코드를 변경할 수 없는 클래스에 몇가지의 행동들을 ..