Develop

Java에서 Kotlin 으로 마이그레이션 본문

백엔드/Java

Java에서 Kotlin 으로 마이그레이션

230801 2025. 5. 23. 03:14

안녕하세요 .ᐟ 

 

자바 -> 코틀린 마이그레이션을 주제로 특강을 듣고, 알게된 내용을 작성해보겠습니다.

내용은 JVM 메모리 구조부터 Kotlin 등장배경, 기초문법, 간단한 실습 등의 순서로 이루어집니다.

 

 


1. JVM 메모리 구조

  • 힙 영역: 객체가 저장됨 (new 등으로 생성)
  • 스택 영역: 메서드 내 지역변수, 파라미터, 호출 트레이스 저장
  • 메서드 영역: 클래스, 메서드 정보 등 저장 (static 등 포함)

 

왜 알아야 하는가?

OOM(Out Of Memory) 발생 시 원인 분석에 필요하며, GC가 static 참조 등으로 메모리를 해제하지 못하는 경우도 있음
→ 기본 원리 이해가 실무 대응 속도를 높여줌

 

실습

  1. 터미널에서 Java 파일 생성
    • Main.java 파일 작성
    • 내용: System.out.println("hello, bytecode !!!");
  2. 컴파일
    • javac Main.javaMain.class 바이트코드 생성됨
  3. 바이트코드 파일 확인
    • cat Main.class → 사람이 읽기 어려운 바이너리 형태 출력
    • javap -c -v Main.class → JVM이 이해하는 명령어(bytecode)로 확인

 

개념 정리

  • javac → 소스코드를 바이트코드로 컴파일
  • .class → JVM이 실행할 수 있는 바이트코드가 담긴 파일
  • javap -c -v → 바이트코드를 디컴파일해 JVM 명령어를 분석 가능

 

 

2. Kotlin 등장 배경 및 특징

왜 코틀린이 등장했나?

  • Java보다 간결하고 안전한 문법
  • Null Safety: NPE 방지
var name: String? = null // 널 허용
name?.length // 안전하게 접근

 

코틀린의 주요 특징

  • Null Safety (String?, ?.)
  • 간결함: 세미콜론 X, get/set 자동, builder 필요 없음
  • 상호 운용성: Java 코드 그대로 사용 가능
  • Type Inference: 자료형 자동 추론
  • Coroutines: 비동기 프로그래밍을 직관적으로 사용하게 해주는 도구

 

 

3. Kotlin 기초 문법 

  • 변수 : val (불변), var (가변)
  • data class :  new 없이 인스턴스 생성 가능
data class User(val name: String)
val user = User(name = "길동")

 

  • 기본 타입도 모두 래퍼형 (예: Int는 객체)
  • println, ?. 연산자, 오퍼레이터 활용 가능

 

 

 

4. 자바 → 코틀린 마이그레이션 전략

  • 실습 : User CRUD 기능 마이그레이션
  • 고려할 점들:
    • JPA에서 NoArgs 생성자 필요한 이유 (프록시 객체 생성, 리플렉션 등에 필요)
    • Spring의 Bean 등록 방식 (생성자 주입과 val의 연결)
    • SimpleJpaRepository: 스프링 데이터 JPA의 기본 구현체 구조
    • val = Java의 final → 재할당 불가
    • Kotlin에선 Lombok 필요 없음 (기본적으로 getter/setter/toString 등 제공)
  • 마이그레이션 도구:
    • 인텔리제이 → Code → Convert Java to Kotlin
    • 빌드 후 실행 전: 코틀린 의존성 추가 필수
implementation("org.jetbrains.kotlin:kotlin-reflect")

 

 

 

 

 

감사합니다.

'백엔드 > Java' 카테고리의 다른 글

Generic(제네릭)  (2) 2025.06.11
Assert  (0) 2025.05.23