안녕세계
ArchUnit이란?보통 팀마다 정해져있는 아키텍처가 문서로 작성되어 있거나 기존 코드의 아키텍처를 참조해가며, 개발을 진행하는 경우가 많을 것 입니다. 아키텍처에 위배되는 개발이 되는 것을 미연에 방지하기 위해서는 어떤 방법이 좋을까요? 팀에서 정의한 아키텍처를 위배했을때 코드리뷰를 통해서 잘못된 아키텍처를 바로 잡을 수도 있겠지만, 코드리뷰에서는 비즈니스 로직에 대한 검증을 중점적으로 하고 아키텍처와 관련된 부분은 자동화하는 편이 더 효율적일 것입니다. ArchUnit은 Java 애플리케이션의 아키텍처 규칙을 코드로 정의하고 테스트할 수 있게 해주는 오픈 소스 라이브러리입니다. 애플리케이션의 아키텍처가 복잡해지고 방대해질수록 각 계층 간의 의존성을 유지하고 코드의 일관성을 보장하는 것이 중요해집니다...
이번 포스팅에서는 제네릭과 무공변에 대해 알아보고, 무공변을 공변과 반공변으로 만드는 방법에 대해 알아봅니다. 우선, 제네릭에 대해 설명하기 위해 아이스크림 가게 예제를 만들어 보겠습니다. 현재 아이스크림 가게에는 초코 아이스크림과 민트 아이스크림이 있다고 가정해봅니다. interface IceCream class ChocoIceCream : IceCream class MintIceCream : IceCream 그리고 콘에 아이스크림을 올리는 put 메서드를 추가하고, 콘에서 아이스크림을 꺼내는 get 메서드를 추가합니다. class Cone { private val iceCreams: MutableList = mutableListOf() fun get(index: Int): IceCream { retu..
고차 함수란? 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수를 의미합니다. 람다나 함수 참조를 인자로(argument)로 넘길 수 있으면 고차 함수이다. 예: 표준 라이브러리 함수인 filter는 술어 함수(predicate function)를 인자로 받으므로 고차 함수이다. 술어 함수란? 반환 값으로 진리 값(참/거짓)을 반환하는 함수 람다나 함수 참조를 반환하면 고차 함수이다. 함수 타입 람다를 인자로 받는 함수를 정의하기 위해서는 람다 인자의 타입을 선언하는 방법에 대해 먼저 알아야합니다. 코틀린의 타입 추론으로 인해 변수 타입을 지정하지 않아도 람다를 변수(variable)에 대입할 수 있으므로 다음과 같이 정의할 수 있습니다. val sum = { x: Int, y: Int -> ..
Delegation 이란? Delegation(위임)은 클래스나 프로퍼티의 기능을 다른 객체에 위임하는 디자인 패턴입니다. Kotlin에서는 보일러 플레이트 코드 없이 `by` 키워드를 사용해서 `Delegation Pattern`을 구현할 수 있는 방법을 지원합니다. 클래스 위임 클래스 위임은 특정 인스턴스의 메서드 호출시 해당 기능을 다른 클래스에게 위임합니다. 다음 예제는 `Child` 클래스의 `pay`를 호출하면 `Parent` 클래스의 `pay` 메서드를 실행합니다. 이때 `Child` 클래스 선언에 `by` 키워드를 사용했으며, `Parent` 클래스의 인스턴스를 생성자 파라미터로 전달합니다. 이제 `Child` 클래스가 `pay` 기능을 사용하면 `Parent` 클래스에게 위임하여 `pa..
확장 함수란? 확장 함수는 Kotlin 기능 중 하나로, 기존 클래스에 새로운 함수를 추가하는 것 입니다. 즉, 이미 존재하는 클래스에 대해 확장 함수를 정의하여 해당 클래스의 인스턴스에서 멤버 함수처럼 호출할 수 있습니다. 확장 함수는 기존 클래스의 내부에 접근하지 않고도 외부에서 확장 함수를 작성하여 사용할 수 있습니다. 이를 통해 기존 클래스의 기능을 확장하거나, 특정 작업을 수행하는 유틸리티 함수를 제공할 수 있습니다. 확장 함수는 점 표기법을 사용하여 호출되며, 호출 대상 객체는 `수신 객체(receiver object)`라고 불립니다. 확장 함수를 선언할 때는 해당 확장 함수가 적용될 클래스를 수신 객체 타입으로 지정하고 그 뒤에 확장 함수 이름을 지정합니다. 그럼 이제 확장 함수를 선언하고 ..
Kotlin을 시작한지 얼마되지 않았을 때 Kotlin 문법 중 `Scope Functions`의 차이점과 용도 구분이 어려웠습니다. 본 포스팅에서는 Kotlin 공식 문서에서 소개하고 있는 Scope Functions의 목적, 각 함수들의 차이점과 사용 사례를 알아봅니다. Scope Functions 란? Scope Functions는 Kotlin 표준 라이브러리로 객체의 문맥(context of an object) 안에서 코드 블럭을 실행하는 것이 목적인 함수들 입니다. 람다 표현식이 제공된 객체에서 Scope Function을 호출하면 임시 스코프가 생성되며, 임시 스코프에서는 이름 없이 객체에 접근할 수 있습니다. 이러한 함수들을 Scope Functions라고 부르며 `let`, `run`, ..