정의부모 클래스에서 구현해야할 객체의 단계를 전체적으로 정의한다음, 자식 클래스마다 달라지는 단계에 대해서만 부모 클래스단에서 추상 메서드로 정의하여 자식클래스가 해당 메서드를 오버라이드할 수 있게 하는 패턴목적비슷한 개념을 가진 객체들의 중복되는 코드는 부모클래스에서 정의하기에 코드 길이가 줄어들며, 관리하기가 용이하다.해당 패턴을 사용하지 않을 경우class Coffee { fun make(): List { val result = mutableListOf() result.add("물을 끓입니다.") result.add("커피 원두를 내립니다.") result.add("컵에 따릅니다.") result.add("설탕과 우유를 넣습니다."..
정의 상태를 관리하는 Subject 객체가 자신을 구독한 Observer 객체들의 참조를 보관하고 있다가, 상태가 변경되면 등록된 Observer들의 공통 알림 메서드를 호출하여 변경 사실이나 변경된 데이터를 전달하는 행동 패턴목적Observer 패턴을 씀으로서 알림을 주는 객체는 마치 구독자 관리 시스템처럼 알림을 받는 대상의 참조값과 알림 기능의 호출 method만 가지만 된다.알림을 받는 객체는 알림을 주는 객체에게 알림을 받겠다고 요청만 하면, 알림을 주는 객체는 알림을 받겠다는 객체의 참조값만을 저장하고 관리하여 해당 객체들에게만 알림을 주는 함수를 호출하면 알림을 받는 객체들에게만 알림을 줄 수 있다. 코드전체 코드package designpatterninterface Observer { ..
정의프로그램 전체 관점에서 특정 클래스의 객체를 하나만 생성하고 그 하나의 객체를 여러곳에서 공통으로 사용하도록 하는 패턴해당 패턴은 특히 예외적으로 특정 언어 플랫폼에 따라서 구현법이 달라진다. 목적설정관리자, 로그 관리자, 캐시 관리자처럼 여러 객체를 두어 따로 존재할 필요없이 한 곳에서만 집중 관리가 필요한 경우생성자 호출하여 객체를 여러개 생성하여 필수 설정 내용이 각 객체마다 따로 관리되어 달라진다.프로그램 전체에서 동일한 설정을 요한다면 문제가 된다. 코드object ConfigManager { var timeout = 30 fun printConfig() { println(timeout) }}코틀린에서는 보통 object 문법을 활용하여 싱글톤 패턴을 구현한다.코..
정의빌더 패턴은 최종 객체 생성에 필요한 여러 설정값을 Builder 객체에 임시로 저장한 뒤, 그 설정값을 바탕으로 최종 목적 객체를 생성하는 패턴이다. 필요한 이유class Computer( val cpu: String, val ram: Int, val storage: Int, val gpu: String?, val wifi: Boolean, val bluetooth: Boolean)val computer = Computer("Intel i7", 32, 1000, "RTX 5070", true, true)각 값이 무엇인지 코드만 보고 바로 구분하기 힘들며, 매개 변수 순서도 틀릴 가능성 존재한다.(가독성 문제)선택항목이 많아지면 필요없는 값까지 어쩔 수 없이 null,..
정의공통된 업무 흐름은 부모 클래스에 두고, 해당 공통 업무 흐름 부분에서 객체 종류에 따라 달라지는 생성 부분은 자식 클래스가 부모의 팩토리 메서드를 오버라이하여 결정하는 디자인 패턴이다 필요한 이유abstract class Logistics { abstract fun deliverSequence()}class RoadLogistics : Logistics() { override fun deliverSequence() { checkOrder() prepareCargo() Truck().deliver() sendNotification() }}class SeaLogistics : Logistics() { override fun deli..
단위 테스트란 무엇인가?단위 테스트는 코드의 가장 작은 기능적 단위를 테스트하는 프로세스특징코드 품질 보장을 위해 소프트웨어 개발의 필수 요소소프트웨어를 작은 기능적 단위로 작성한 다음 코드 단위별 단위 테스트를 작성하는 것이 소프트웨어 개발 모범 사례단계단위 테스트 코드(함수, 클래스 OR 메서드)를 선택접근 방식 선택: 수동 테스트 OR 프레임워크를 이용한 자동화된 단위 테스트테스트 환경 구축: test data, dependancy, mock objects 등 test를 실행하기위한 환경을 구축IDE(Integrated Development Environment) 를 활용하는 것이 필수테스트 케이스 사용 및 생성테스터는 테스팅 프레임워크와 테스트 케이스를 선택 및 실행한다면, 그 결과를 확인(버그가..
개요이번 시간에는 자바와 코틀린 언어를 성능, 개발편의성, 활용 측면에서 소개해드리도록 하겠습니다. 성능자바나 코틀린이나 컴파일 하면 자바 바이트 코드로 변환되고 그걸 jvm에 올려서 실행하는 단계에서는 성능상 그렇게 차이가 안 날 수는 있다. 다만, 결국 언어마다의 컴파일러가 다르기에 컴파일 단계에서는 성능상의 차이가 존재할 수 있다. 그리고 자바에서 코틀린 함수를 호출하는 것은 100퍼센트 가능하다고 장담할 수는 없으나, 코틀린에서 자바 코드를 호출하는 건 장담할 수 있다. 개발 편의성자바상대적으로 코드가 길고, Getter/Setter 등 보일러플레이트(Boilerplate) 코드가 많다. 런타임 시 NullPointerException 발생 위험이 있다.코틀린문법이 매우 간결하다. 코틀린 공식 ..
