자바의 신 - 오늘의 학습 정리 (패키지, 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 | 참조형이지만 불변. 내용 변경 불가 |
📌 개발자로서 기억해야 할 포인트
- "동작 원리"를 이해해야 예외 상황과 버그를 피할 수 있음
- 자바는 단순한 문법보다는 메모리 구조, 불변성, 참조 관계 이해가 핵심
- 설계에 강한 개발자는 클래스 구조와 패키지 단위부터 달라짐
'기타 > 자바의 신' 카테고리의 다른 글
| (자바)자바의 신 day6 - Java String 완벽 정리: intern(), 문자열 덧셈, 최적화 (0) | 2025.06.29 |
|---|---|
| (자바) 자바의 신 day5 - 자바에서 업캐스팅과 다운캐스팅, equals와 hashCode, toString의 역할 및 오버라이딩 이유 (0) | 2025.06.25 |
| (자바) 자바의 신 day4 - 상속 기본 (생성자 규칙 + 오버라이딩) (0) | 2025.06.24 |
| Java 신 개념 총정리 — char, this, switch, 생성자, 자료형 설계 이유까지 (day2) (4) | 2025.06.19 |
| Java의 신 Day 1 정리 (0) | 2025.06.18 |