목록분류 전체보기 (44)
개발자이야기
의존성 주입 이번엔 의존성주입에 좀더 자세히 설명을 해볼까 합니다. 의존성 주입이 무엇일까? 개발을 하다보면 필연적으로 객체 내에서 객체를 사용하게 됩니다. 예를들어 자동차를 만든다고 가정해 봅시다. Car 클래스 라는 껍데기가 있고 그 안에 엔진, 바퀴 등등의 각각의 구성요소(객체)가 들어갑니다. 이것들을 직접 의존하는것이 아닌 추상된 것에 의존하고 외부로 부터 구체화 된 것을 주입 받겠다는 것 입니다. 위의 말은 간단하게 아래의 코드와 같이 특정 객체를 직접 의존해선 안된다는 것 입니다. 이것이 의존성을 갖게 되는것이죠. public class Car { private Gasoline engine; private SnowTier tier; } 그럼 장점은 무엇일까? 1. 코드의 재사용성이 높아집니다...
추상팩토리패턴 추상 팩토리 패턴(Abstract factory pattern)은 다양한 구성 요소 별로 객체의 집합을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다. 위의 내용이 무엇일까?? 재료의 공장을 만든다고 생각해봅시다. 예제에서 설명하고자 하는 재료의 공장은 두가지 입니다. 롯데리아 공장, 맥도날드 공장. 각각의 공장에서 하는 일은 같습니다. 재료를 전달해준다. 햄버거의 만드는 과정 1. 고객의 햄버거 주문 2. 주문에 의한 버거메뉴 조리 3. 공장에서의 재료 조달 간단하게 위와같이 3단계의로 나누어 보았습니다. 이제 예제로 한번 살펴봅시다. 코드는 위의 과정을 역순으로 올라가 보겠습니다. 3. 공장에서의 재료 조달 public interface Ingred..
팩토리 메소드 패턴 팩토리 메소드 패턴이란 무엇일까? 우선 아래의 코드를 보도록 하겠습니다. public class BurgerMain { public static void main(String[] args) { BurgerStore store = new BurgerStore(); CheeseBurger burger = store.order(); } } public class BurgerStore { CheeseBurger order() { return new CheeseBurger(); } } 햄버거 가게에 햄버거 주문이 들어왔습니다. 그런데 버거를 주문해봤자 치즈버거만 제공해 줄 수 있는 상황입니다. 너무 극단적인 상황이죠.. 불고기 버거를 추가해 보겠습니다. public class BurgerSto..
템플릿 메소드 패턴 템플릿 메소드 패턴은 추상클래스와 구현클래스로 작성됩니다. 공통적인 부분은 추상클래스의 일반 메소드로 선언하여 사용하며 구현체 마다 다른 로직이 필요한 메소드는 구현 클래스에서 작성하여 추상클래스에서 호출하는 식으로 동작합니다. 코드를 보며 설명해보겠습니다. 토스트를(여기서 말하는 토스트는 먹는 토스트입니다..) 만드는 예제입니다. 예제에는 3단계의 메소드가 있습니다. 1. 빵을 준비하는 단계 2. 토핑을 소스에 뭍히는 단계 3. 토스트를 만드는 단계 예제가 순서는 크게 중요하지 않아 보이나 메소드의 순서에 따라 동기적인 프로세스를 만들 경우를 생각해 본다면 한번 정의만 잘 해놓으면 구현체를 구현하는 과정에서 많은 편의를 느낄 수 있을것 입니다. 기능에만 집중하면 되니까요. publi..
Dagger DI(의존성주입)는 갈수록 비대해지는 프로젝트와 요구사항들과 수정사항들이 많아지는 요즘 개발 시장에서 계속해서 중요하게 다뤄지고 있습니다. (과거에는 제가 어려서 잘 모르겠습니다..) Dagger는 팩토리패턴과 연관성이 깊습니다. 팩토리 패턴에 대해 추후 포스팅 해보겠습니다. 의존성주입이란? https://webprogramcustom.tistory.com/26 의존성주입(DI) android dagger 해당 글은 kotlin을 기반으로 작성 되었습니다. 의존성 주입(DI)이란 무엇일까? 간단하게 객체를 외부에서 생성하여 넘겨주는 것을 말한다. class Car { var engine: Diesel = Diesel() var tier: SnowTier = Snow.. webprogramcu..
mvvm + dagger (AAC) Android Architecture Components AAC ViewModel 과 LiveData 그리고 DataBinding을 사용했습니다. 우선 글을 시작하기에 앞서 AAC ViewModel은 mvvm의 vm을 말하는것은 아닙니다. AAC ViewModel 없이도 충분히 mvvm 디자인패턴 설계를 할 수 있습니다. AAC의 ViewModel은 프래그먼트 간의 데이터 공유, 수명주기 관리를 편하게 해주는 라이브러리 입니다. 자세한 내용은 https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ko 이번엔 간단한 예제를 이용한 MVVM 디자인 패턴과 Dagger 를 알아볼까 합니다. Dagge..
High-order functions 고차함수는 함수를 매개변수로 사용하거나 함수를 반환하는 함수이다. 위의 내용을 한번 알아봅시다. fun main(args: Array) { highFunctions { print(it) Unit) { function(20) Unit 은 java의 void와 같습니다. (고차함수의 반환 유형은 생략할 수 없습니다.) 위와 같이 매개변수의 함수(function(20))를 호출 함으로써 코드블럭이 실행됩니다. fun main(args: Array) { val value = highFunctions(30) { 코드블록 "값은 $it*3" R): R { return function(input) } 위와 같이 고차함수를 호출하여 코드블록 결과값을 반환하여 return 시켜주는 ..
kotlin scope functions 코틀린 범위지정 함수 5가지에 대해 알아 보겠습니다. 보통 let ,with, apply 를 많이 써왔지만 명확한 기준을 잡고 싶어 한번 분석해 보려고 이 글을 작성합니다. 해당글은 코틀린 공식 문서의 예제를 기반으로 분석및 작성 합니다. let Kotlin 표준 라이브러리 함수 let은 범위 지정 및 null 검사에 사용할 수 있습니다. 객체에서 호출되면 람다식의 코드 블록을 실행하고 마지막 표현식의 결과를 반환합니다. 객체는 참조 it(기본적으로) 또는 사용자 정의 이름으로 블록 내에서 액세스 할 수 있습니다. 위 내용은 kotlin 공식문서에서 설명해 주는 내용입니다. public inline fun T.let(block: (T) -> R): R { cont..