Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 네트워킹데이
- Pager
- MySQL
- 욕심쟁이 방법
- mysql 표
- 데이크스트라
- mycli
- cs
- 알고리즘
- 분할정복 방법
- zsh
- mysql 표 출력
- 오블완
- Less
- 순차탐색
- zsh theme
- VI
- 터미널
- 스터디2기
- 티스토리챌린지
- CS스터디
- 오일러 경로
- table status
- spring boot
- 맥
- 동적 프로그래밍 방법
- oh-my-zsh
- 인프런
- 이진탐색
- 인프런워밍업클럽
Archives
- Today
- Total
Develop
Java에서 Kotlin 으로 마이그레이션 본문
안녕하세요 .ᐟ
자바 -> 코틀린 마이그레이션을 주제로 특강을 듣고, 알게된 내용을 작성해보겠습니다.
내용은 JVM 메모리 구조부터 Kotlin 등장배경, 기초문법, 간단한 실습 등의 순서로 이루어집니다.
1. JVM 메모리 구조
- 힙 영역: 객체가 저장됨 (new 등으로 생성)
- 스택 영역: 메서드 내 지역변수, 파라미터, 호출 트레이스 저장
- 메서드 영역: 클래스, 메서드 정보 등 저장 (static 등 포함)
왜 알아야 하는가?
OOM(Out Of Memory) 발생 시 원인 분석에 필요하며, GC가 static 참조 등으로 메모리를 해제하지 못하는 경우도 있음
→ 기본 원리 이해가 실무 대응 속도를 높여줌
실습
- 터미널에서 Java 파일 생성
- Main.java 파일 작성
- 내용: System.out.println("hello, bytecode !!!");
- 컴파일
- javac Main.java → Main.class 바이트코드 생성됨
- 바이트코드 파일 확인
- 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 |