기타/자바의 신

(자바)자바의 신 day3 - 오늘의 학습 정리 (패키지, static, 참조/기본형 등)

불광동 물주먹 2025. 6. 20. 01:13

자바의 신 - 오늘의 학습 정리 (패키지, static, 참조/기본형 등)

오늘 공부한 내용을 중심으로, 개발자 관점에서 꼭 알아야 할 실전 감각과 개념을 함께 정리합니다.


1️⃣ Java 패키지란?

🔹 패키지(Package) 기본 개념

  • 클래스를 논리적으로 묶는 단위
  • 자바 파일 최상단에 package com.example.util;처럼 선언
  • 다른 패키지의 클래스를 사용할 땐 import 필요
  • 같은 패키지 내부 클래스는 import 없이 접근 가능

🔹 왜 패키지가 중요한가? (실무 관점)


이유 설명
역할 분리 controller, service, repository 등으로 기능별 구조화
유지보수 기능/영역별 분리로 수정 시 영향 범위 최소화
접근 제어 default/protected는 같은 패키지 내에서만 접근 가능
빌드/모듈화 Gradle/Maven 등에서 모듈 경계 구분 가능

 

패키지를 어떻게 나누느냐가 설계 역량이다.


2️⃣ static 변수와 메서드

🔹 static의 본질

  • 클래스가 메모리에 로딩될 때 1회 생성
  • 객체 없이도 접근 가능
  • static 변수와 static 메서드는 Method Area에 저장

🔹 static 메서드의 특징

  • 객체 생성 없이 클래스명으로 호출 가능
  • ❌ 인스턴스 변수 사용 불가
    → 객체 없이 호출되기 때문에 Heap에 생성되는 인스턴스는 모름
public class Example {
    static int staticVar = 10;
    int instanceVar = 20;

    public static void staticMethod() {
        System.out.println(staticVar);    // ✅ 가능
        // System.out.println(instanceVar); // ❌ 에러
    }
}

3️⃣ static 블록

🔹 정의

  • 클래스가 JVM에 처음 로딩될 때 단 한 번 실행되는 블록
  • 보통 static 변수의 복잡한 초기화, 설정값 로딩 등에 사용
static {
    System.out.println("클래스 로딩 시 1회 실행");
    config = new Properties();
    config.load(...);
}

✅ 주의: 너무 많은 로직을 넣으면 클래스 로딩이 느려질 수 있음


4️⃣ 기본형 vs 참조형 (값 전달 차이)

🔹 자바는 모두 값에 의한 전달 (call by value)

 

타입 전달 내용 메서드 내에서 원본 변경 가능?
기본형 (int, double 등) 값 자체 ❌ (복사본만 바뀜)
참조형 (객체, 배열 등) 주소값 복사 ✅ 내부 상태 수정 가능
 

5️⃣ 그런데 String은 왜 예외처럼 보일까?

🔹 String은 참조형인데 값이 안 바뀜 → 이유: 불변 객체 (immutable)

public static void change(String s) {
    s = s + " world"; // 새 String 객체가 만들어짐
}
  • s는 새 객체를 가리킬 뿐, 원래 문자열에는 영향 없음
  • String은 내부 상태 변경 불가 → 불변성을 유지함

🔹 왜 불변하게 만들었나?


이유 설명
보안성 URL, DB 키 등 민감 데이터 변경 방지
해시 최적화 HashMap key로 많이 쓰이기 때문
스레드 안정성 멀티스레드 환경에서도 안전
 

✅ String은 참조형이지만 특수한 불변 객체
내용을 변경하고 싶으면 StringBuilder 같은 가변 클래스를 써야 함


✅ 마무리 요약


주제 핵심 요약
패키지 클래스 그룹화 + 구조 설계 핵심 단위
static 객체 없이 접근되는 클래스 수준 자원
static 블록 클래스 로딩 시 1회 초기화용
기본형 전달 값 복사. 메서드 내에서 원본 영향 없음
참조형 전달 주소 복사. 내부 상태는 변경 가능
String 참조형이지만 불변. 내용 변경 불가
 

📌 개발자로서 기억해야 할 포인트

  • "동작 원리"를 이해해야 예외 상황과 버그를 피할 수 있음
  • 자바는 단순한 문법보다는 메모리 구조, 불변성, 참조 관계 이해가 핵심
  • 설계에 강한 개발자는 클래스 구조와 패키지 단위부터 달라짐