본문 바로가기

Backend

Kotlin 백엔드 개발자를 위한 Java 개념 정리

반응형



코틀린으로 개발을 하면서 자바에 대한 개념을 어느정도 알아야할까 궁금하게되면서 정리를 해봤습니다.



1. Java 문법 기본

✅ 객체 지향 개념

📌 클래스(Class)와 객체(Object)

  • 클래스(Class): 객체를 생성하기 위한 설계도 또는 틀. 객체가 가져야 할 속성(변수)과 동작(메서드)을 정의함.

  • 객체(Object): 클래스에 정의된 내용을 바탕으로 메모리에 할당된 실체.

    class Car {
        String brand;
        int speed;
        void drive() {
            System.out.println("Driving " + brand + " at " + speed + " km/h");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Car myCar = new Car(); // 객체 생성
            myCar.brand = "Hyundai";
            myCar.speed = 120;
            myCar.drive();
        }
    }

📌 상속(Inheritance)

  • 부모 클래스의 속성과 메서드를 자식 클래스가 상속받아 사용 가능.
  • 코드 재사용성을 높이고 유지보수성을 향상시킴.

📌 인터페이스(Interface)

  • 클래스가 반드시 구현해야 하는 메서드를 명세하는 역할.
  • 다중 상속을 허용하여 유연한 설계 가능.

📌 추상 클래스(Abstract Class)

  • 공통적인 기능을 제공하지만, 직접 객체를 생성할 수 없음.
  • 일부 구현된 메서드와 추상 메서드를 가질 수 있음.

📌 캡슐화(Encapsulation)와 다형성(Polymorphism)

  • 캡슐화: 데이터(변수)와 이를 조작하는 메서드를 하나의 단위로 묶어 보호.
  • 다형성: 같은 인터페이스나 상위 클래스를 공유하면서 다른 방식으로 동작 가능.

2. Spring Boot에서 자주 쓰이는 Java 기능

✅ 어노테이션 기반 프로그래밍

📌 어노테이션(Annotation)이란?

  • Java 코드에 메타데이터(정보)를 추가하는 역할.
  • 런타임 또는 컴파일 타임에 동작하며, 프레임워크에서 특정 기능을 제공하는 데 사용됨.
  • Spring Boot에서는 의존성 주입(DI), 트랜잭션 관리, 빈(Bean) 설정 등에 활용됨.

📌 주요 어노테이션

  • @Component, @Service, @Repository: Spring Bean 등록
  • @Autowired, @Qualifier: 의존성 주입(DI)
  • @Configuration, @Bean: Bean 생성 및 설정
  • @Transactional: 트랜잭션 관리

3. JVM과 메모리 관리

✅ JVM (Java Virtual Machine) 구조 이해

📌 JVM이란?

  • Java 프로그램을 실행하는 가상 머신으로, 운영체제에 독립적인 실행 환경 제공.
  • 바이트코드를 해석하여 실행하고, 메모리를 관리하는 역할 수행.

📌 JVM의 주요 구성 요소

  • ClassLoader: .class 파일을 로드하는 역할.
  • Runtime Data Area: JVM이 실행 중에 사용하는 메모리 영역.
    • Heap: 객체가 저장되는 공간 (GC 대상)
    • Stack: 메서드 실행 시 사용하는 메모리 공간 (지역 변수 저장)
    • Method Area: 클래스 메타데이터 저장.
    • PC Register: 현재 실행 중인 명령어 주소 저장.
    • Native Method Stack: JNI(Java Native Interface) 호출을 위한 영역.

4. 멀티스레딩과 동시성 처리

✅ 멀티스레딩이란?

  • 하나의 프로세스 내에서 여러 개의 스레드를 실행하여 동시에 여러 작업을 수행하는 방식.
  • CPU 사용률을 높이고 응답성을 개선할 수 있음.

📌 주요 개념

  • Thread, Runnable: 스레드 생성 및 실행
  • ExecutorService, Callable, Future: 비동기 처리
  • synchronized 키워드: 동기화 처리 (경합 방지)

📌 비동기 처리

  • Spring Boot의 @Async를 활용하여 비동기 실행 가능.
  • CompletableFuture를 이용한 비동기 작업 실행.

5. 자바 코드 리팩토링 & Kotlin과 비교

✅ Java → Kotlin 변환 시 고려해야 할 것

📌 Java의 특징

  • Null 값이 존재할 수 있어 NullPointerException 발생 가능.
  • Optional<T>을 활용하여 Null 안전성 보장.
  • Checked Exception과 Unchecked Exception이 존재.

📌 Kotlin의 개선점

  • Null 안전 (?., !!, lateinit)
  • Data Class를 통한 간결한 데이터 객체 선언 (data class)
  • 고차 함수 및 람다를 통한 함수형 프로그래밍 지원.

6. Kotlin과 Java의 상호운용성

✅ Kotlin에서 Java 코드 사용하기

  • @JvmStatic, @JvmOverloads 등의 어노테이션을 활용하여 Java와 Kotlin 간 상호 운용 가능.
  • Java 코드에서 Kotlin의 getter/setter를 호출할 수 있음.

✅ Java에서 Kotlin 코드 사용하기

  • Kotlin의 object를 Java에서 싱글턴처럼 활용하기.
  • Kotlin의 extension function을 Java에서 사용하기.
  • @JvmName을 활용한 함수 이름 변경.

🎯 결론: Java를 어느 정도까지 공부해야 할까?

  • Kotlin으로 개발하면서도 Spring Boot 내부 동작 원리를 이해할 정도로 Java를 공부하는 것이 좋음.
  • Java 코드를 해석할 수 있으면 Spring, JPA, Hibernate 등의 라이브러리를 깊이 이해할 수 있음.
  • 목표: "Java 코드가 읽히고, 필요하면 수정할 수 있는 수준"이 되면 충분.
반응형