분류 전체보기

    [Kotlin] @JvmName 사용해 바이트코드로 컴파일 될 때 이름 바꾸기

    코틀린 파일의 최상위에 선언된 함수가 컴파일 될 때 일어나는 일 코틀린에서는 .kt 파일을 만든 다음 최상위에 함수를 선언하는 것이 허용된다. 예를 들어 다음과 같이 main 패키지 안에 선언된 Main.kt파일 내부에 printHello 함수가 선언되어 있다고 해보자. 우리가 이를 바이트 코드로 컴파일 하면 다음과 같이 MainKt.class 파일이 생성되며, 이 MainKt 클래스 내부에는 printHello 함수가 정적 함수로 선언된다. 따라서 우리는 이 함수를 자바 파일에서 다음과 같이 사용할 수 있다. import main.MainKt; public class Test { public static void main(String[] args) { MainKt.printHello(); } } 위 코..

    코틀린에서 @JvmOverloads 를 사용해 생성자 오버로딩하기 : 오버로딩이 필요한 경우 한 번에 정리하기

    코틀린 클래스 생성자와 기본값 코틀린에서는 클래스의 생성자에 기본값을 설정하는 것이 허용된다. 예를 들어 우리가 일반적인 메모장을 위한 클래스를 만든다고 해보자. 이 메모장에는 제목(title), 부제목(subTitle), 내용(content)이 들어가며 이를 표현하는 Memo 클래스는 다음과 같이 만들 수 있다. class Memo(val title: String, val subTitle: String = "", val content: String = "") 이렇게 만들어진 Memo 클래스는 다음과 같이 초기화가 가능하다. fun main() { val memo = Memo("dummy title") } 그러면 이 메모 객체는 title 필드에만 dummy title이라는 값이 들어가고 나머지 필드에는..

    [Kotlin] 코틀린 sealed interface란 무엇인가?

    sealed class의 한계와 sealed interface의 등장 sealed class는 클래스를 상속하는 서브 클래스를 컴파일러에서 알 수 있도록 하기 위해 만들어졌다. 아래의 UIState와 같은 간단한 상속구조라면 sealed class로도 충분하다. sealed class UIState() data object Loading : UIState() data class Success(val data: UIData) : UIState() data class Error(val error: Exception) : UIState() 하지만, sealed class를 사용하면, 다른 클래스들이 둘 이상의 sealed class를 상속받지 못하게 되는 한계가 있다. 예를 들어 다음과 같은 코드를 만들어보자..

    HTTP 통신과 TCP, IP 레이어 한 번에 정리하기 : 3way handshake, 소켓 통신

    시작하며 HTTP(HyperText Transfer Protocol) 통신은 클라이언트와 서버 간 데이터를 주고 받기 위한 프로토콜이다. 다시 말하면, HTTP 통신 자체는 어떤 형식의 데이터를 보낼지 미리 정의해 놓는 방식일 뿐이다. 따라서 클라이언트와 서버간 HTTP 통신이 일어나기 위해서는 데이터를 주고 받기 위한 여러 기술이 필요하다. 이번 글에서는 HTTP 통신이 일어나기 위해 내부적으로 어떤 일이 일어나는지를 정리해본다. IP 레이어 IP 레이어란 무엇인가? 먼저 클라이언트와 서버를 생각해보자. 클라이언트와 서버는 컴퓨터일 뿐이며, 데이터를 요청하는 쪽이 클라이언트 데이터를 보내는 쪽이 서버가 된다. 따라서 이 둘간의 통신을 위해서는, 두 컴퓨터가 연결되기 위한 주소값이 필요하다. 이러한 역할..

    [Kotlin] 스마트 캐스트(Smart Cast) 기능을 사용한 안전한 타입 변환: is, as

    Java에서 안전한 타입 변환을 위해 선택했던 방법 서버와의 HTTP 통신을 통해 응답을 받아오기 위해 다음과 같은 Response 인터페이스를 상속하는 간단한 클래스 Success와 Fail을 만들었다고 해보자. sealed interface Response data class Success(val responseBody: String) : Response data class Fail(val errorMessage: String) : Response 기존 자바에서는 안전하게 타입을 변환하기 위해 타입을 변환하기 전에 instanceof 함수를 통해 타입을 체크한 후 다시 타입 변환을 해서 메서드를 호출해야 했다. public class ResponseMain { public static void mai..