목록전체 글 (198)
밤빵's 개발일지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/byi0MT/btsKBQTJcrB/6PNIwfR0ckp0AMZjUkQZA1/img.webp)
sealed interface는 제한된 클래스 계층을 정의하여 다형성을 구현하는 도구이다. sealed 클래스와 유사하지만 인터페이스의 특성을 가지기 때문에 다양한 구현체가 더 자유롭게 동작할 수 있다. ▶sealed interface의 개념sealed interface는 sealed 클래스와 마찬가지로 특정 계층 내에서만 구현될 수 있도록 제한한다. 같은 파일 내에서만 구현 클래스가 정의될 수 있어 외부에서 무분별하게 구현체를 추가하는 것을 방지한다. 이를 통해 코드의 안전성을 높이고 유지보수를 용이하게 할 수 있다. sealed interface Vehicle { fun drive()}class Car : Vehicle { override fun drive() { println..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xbs3X/btsKDiODnOr/PJGIPLJjxYHxlvQCZBdcPK/img.webp)
Lazy Evaluation과 lazy 키워드로 지연 초기화를 활용하는 방법은 프로그램의 성능을 최적화하고 코드의 효율성을 높이기 위해 필수적인 기술이다. ▶Lazy Evaluation이란?Lazy Evaluation은 필요한 시점까지 계산을 미루는 기법이다. 이는 프로그램이 불필요한 계산을 피하도록 도와주어, 메모리 사용량을 줄이고 성능을 향상시킨다. 예를 들어, 특정 변수가 프로그램 실행 중에 필요하지 않다면, 해당 변수의 초기화 작업을 지연시켜 자원을 절약할 수 있다.▶lazy 키워드lazy 키워드를 사용하여 변수를 지연 초기화할 수 있다. lazy 키워드를 사용하면, 변수가 최초로 사용될 때 초기화된다. 이를 통해 초기화 비용을 필요할 때까지 미룰 수 있어 프로그램 시작 시의 부하를 줄일 수 있다..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dk0hEg/btsKzIUP9yG/5jMm02vQMNDVMkx9gO2RM0/img.webp)
실드 클래스는 특정 계층의 클래스들을 제한된 범위 내에서 표현할 때 유용하다. 특히, 상태 관리(State Management) 코드에서 다양한 상태를 명확하게 나타내는 데 큰 도움이 된다. ▶실드 클래스(Sealed Class)란? 실드 클래스는 추상 클래스로, 하위 클래스의 종류를 제한할 수 있는 특징을 가진다. 실드 클래스를 상속받는 클래스들은 반드시 같은 파일 내에 정의되어야 한다. 이를 통해 계층 구조를 보다 명확하고 안전하게 관리할 수 있다. 자바에서는 상속 구조가 파일 단위로 제한되지 않기 때문에, 특정 계층 내의 클래스를 제한하고 싶을 때는 코틀린의 실드 클래스가 더 직관적이고 안전하다. ▷코틀린에서 실드 클래스를 선언하는 방법sealed class Resultclass Success(v..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/eerN1K/btsKzrsNJgW/uCjBhE6llTlhfk50Q7D5A0/img.png)
제네릭은 코드의 타입 안정성과 재사용성을 높이는 중요한 개념이다. 자바에서 제네릭을 사용해본 경험이 있지만, 코틀린에서의 제네릭은 몇 가지 차이점과 함께 보다 직관적인 문법을 제공한다. ▶제네릭(Generic) 개념 이해제네릭은 데이터의 타입을 일반화해 코드를 보다 유연하게 작성할 수 있는 방법으로 다양한 타입에 대해 하나의 코드 블록으로 처리할 수 있어 코드의 중복을 줄이고 유지보수성을 높인다. 제네릭은 주로 클래스나 함수에서 사용되며, 실행 시점이 아닌 컴파일 시점에 타입을 체크하여 타입 안정성을 확보할 수 있다.▶제네릭 클래스 작성제네릭 클래스를 선언할 때는 클래스 이름 뒤에 꺽쇠() 안에 타입 매개변수를 지정한다. class Box(val content: T) { fun getContent..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/6582t/btsKxWZAiS5/BjtZHPAvU1LMDAqQH0Z24K/img.png)
코틀린을 공부하며 반복문을 제어하는 새로운 방식인 라벨(Label)과 break/continue의 조합을 알게 되었다. 자바에서도 break와 continue를 사용해 반복문을 제어할 수 있지만, 코틀린에서는 라벨을 사용하여 특정 반복문을 쉽게 탈출하거나 건너뛸 수 있어 더욱 유연하게 반복문을 제어할 수 있다. ▶라벨(Label) 코틀린에서 라벨(Label)은 특정 코드 블록이나 반복문에 붙여서 그 지점을 식별하는 역할을 한다. 라벨은 @ 기호 뒤에 원하는 이름을 붙여서 생성하고, 특정 반복문이나 코드 블록을 명확히 구분하여 break나 continue 구문을 통해 제어할 수 있다. 라벨을 사용하면 중첩된 반복문에서 원하는 반복문만을 선택적으로 탈출하거나 다음 단계로 건너뛸 수 있어 코드의 가독성과 유..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/9b7p8/btsKwqGo4Gk/o9GyvOdBJpll3p8DQBT2F1/img.png)
네임드 아규먼트(Named Argument)와 기본 파라미터(Default Parameter) 설정 이 두 가지 기능은 자바에서는 경험하지 못한 개념이라 처음엔 조금 낯설었지만, 코드를 더 읽기 쉽게 만들고, 함수 호출의 유연성을 높여주는 장점이 있어 코틀린에서 자주 사용되는 기능이다. ▶네임드 아규먼트(Named Argument)네임드 아규먼트는 함수 호출 시 각 파라미터의 이름을 명시적으로 지정해 전달하는 방식이다. 일반적으로 함수의 인자를 전달할 때는 위치에 따라 값이 할당되지만, 네임드 아규먼트를 사용하면 파라미터의 이름을 함께 지정해 함수 호출을 더 명확하게 만들 수 있다. 이를 통해 가독성이 높아지고, 파라미터의 순서를 외우지 않아도 되는 장점이 있다. ▷예시: 네임드 아규먼트를 활용한 함수 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bwmZ9v/btsKtQsAHf1/fiKWqpl811KWqisbnvhvqK/img.webp)
코틀린의 불변 컬렉션(Immutable Collection)과 가변 컬렉션(Mutable Collection)은 자바에서 이미 List, Set, Map과 같은 컬렉션을 사용해봤지만, 이들 컬렉션을 불변성과 가변성으로 구분하여 제공한다는 점이 다르다. 이 두 가지 컬렉션의 차이점을 이해하고, 각각의 사용법과 특징을 익히는 것은 코틀린에서 안전한 코드를 작성하는 데 중요한 역할을 한다. ▶불변 컬렉션(Immutable Collection) 과 가변 컬렉션(Mutable Collection)의 개념 코틀린에서는 컬렉션을 생성할 때 기본적으로 불변(Immutable) 컬렉션과 가변(Mutable) 컬렉션 중 하나로 선택할 수 있다. 불변 컬렉션은 한 번 생성되면 내부의 요소를 변경할 수 없고, 가변 컬렉션은..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/M1Jrm/btsKtUH7tvN/l5LTisvtgTmKE5FG2PUdUk/img.webp)
코틀린을 공부하면서 자바와는 다른 기능 중 하나로 백틱(`)을 활용한 함수와 변수 이름 정의 방식을 알게 되었다. 자바를 공부할 때는 함수나 변수 이름을 지을 때 특정 문법 규칙을 엄격하게 따랐어야 했다. 하지만 코틀린에서는 백틱을 활용하여 일반적으로 허용되지 않는 예약어를 함수나 변수 이름으로 사용할 수 있고, 심지어 공백이 포함된 테스트 이름도 정의할 수 있다. 이러한 기능은 코드의 가독성을 높이고 테스트 코드 작성 시 의도를 더욱 명확히 전달할 수 있게 해준다. ▶백틱(`)을 활용한 함수와 변수 정의코틀린에서는 일반적으로 사용할 수 없는 이름이나 예약어를 백틱(`)으로 감싸면 함수나 변수 이름으로 사용할 수 있다. 예를 들어, when, class, in` 같은 코틀린의 예약어는 보통 이름으로 사..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bFeZds/btsKtiCwoDj/JA1uLNFg087v6eJgHNHjFK/img.webp)
코틀린을 공부하면서 처음 마주한 부분 중 하나가 바로 타입 시스템이였다. 자바를 조금 공부해본 입장에서, 코틀린의 타입 시스템은 익숙하면서도 독특한 개념들을 포함하고 있어 흥미로웠다. 특히 Any, Unit, Nothing이라는 타입들은 각각 객체, 함수 반환값, 프로그램 흐름을 다루는 데 중요한 역할을 한다. ▶ Any Any는 코틀린에서 가장 기본적인 타입으로, 모든 코틀린 타입의 상위 타입이다. 자바의 Object와 비슷한 역할을 하며, 어떤 타입의 객체든지 Any 타입으로 선언할 수 있다. 그러나 자바의 Object와 달리, 코틀린의 Any는 null을 허용하지 않으며, nullable을 허용하려면 Any? 타입을 사용해야 한다.val anyValue: Any = "Hello, Kotlin"va..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ba0PGu/btsKrRqzrcM/ZUeT90nognjTktK2Od3gxk/img.webp)
코틀린의 연산자 오버로딩(Operator Overloading)은 객체 간의 연산을 정의해 코드가 더 직관적이고 간결해지도록 도와주는 기능이다. 자바에서는 연산자를 직접 오버로딩할 수 없지만, 코틀린에서는 다양한 연산자(+, -, *, /, % 등)를 클래스에 맞게 재정의할 수 있다. ▶ 연산자 오버로딩 (Operator Overloading) 연산자 오버로딩은 특정 클래스에 연산자를 재정의하여 그 클래스에 맞는 연산 방식을 구현하는 방법이다. 예를 들어, 두 객체를 더하는 + 연산자를 재정의하면 객체1 + 객체2 형식으로 직관적인 코드를 작성할 수 있다. 이 기능은 특히 벡터, 복소수, 행렬 등의 수학적 개념을 다룰 때 유용하다. 자바에서는 연산자 오버로딩을 지원하지 않지만, 코틀린에서는 이러한 기능..