기타/자바의 신

Java의 신 Day 1 정리

불광동 물주먹 2025. 6. 18. 23:12

Java의 신 Day 1 정리

"자바의 신"은 겉보기엔 초급자를 위한 입문서처럼 보이지만, 입문을 넘어서 기초를 다지는 데 매우 좋은 책이라는 얘기를 자주 들어왔습니다. 개인적으로는 과거에 가볍게 넘겼던 내용이나 애매하게 알고 있던 기초 개념들을 제대로 다시 잡고 싶어서 이 책을 읽어보기로 결심했습니다.

특히, 이미 알고 있다고 생각했지만 사실은 불분명하게 알고 있었던 부분들 다시 돌아보는 데 이 책이 굉장히 도움이 될거 같습니다. 

저처럼 "자바를 사용하고 있지만 개념이 명확하지 않다"거나, "기초를 다시 다지고 싶은 분들"에게도 이 정리글이 도움이 되길 바랍니다.


✅ 1. 자바 GUI 프로그래밍이란?

  • GUI (Graphical User Interface): 그래픽 기반의 사용자 인터페이스 (버튼, 텍스트박스 등)
  • 자바에서 GUI를 만들 수 있는 도구:
    • AWT (Abstract Window Toolkit): 운영체제에 의존적이고 무거움
    • Swing: 자바로 직접 그려주는 방식, AWT보다 가볍고 유연함
    • JavaFX: 최신 기술, 멀티미디어까지 지원하지만 요즘은 많이 쓰이지 않음
  • 예시 (Swing):
JFrame frame = new JFrame("타이틀");
frame.setSize(300, 200);
frame.setVisible(true);
  • 필자가 말한 요지는: 자바를 콘솔로만 배우지 말고 GUI도 만들어 보자는 뜻.

✅ 2. 자바 변수 4가지 종류 정리 (핵심)

구분 선언 위치 메모리 영역 수명 특징

지역 변수 메서드/블록 내부 Stack 블록 끝나면 소멸 초기화 안하면 에러
매개 변수 메서드 선언부 Stack 메서드 실행 중 메서드 인자 역할
인스턴스 변수 클래스 내부, static 없음 Heap 객체 참조되는 동안 객체마다 별도 존재
클래스 변수 클래스 내부, static 있음 Method Area 프로그램 종료까지 모든 인스턴스가 공유

✅ 3. 인스턴스 변수 vs 클래스 변수 정리 (헷갈린 부분)

🔹 오해했던 부분:

"클래스 내부에 있으니까 클래스 변수 아닌가?"

  • 클래스 변수는 반드시 static 키워드가 붙은 변수
  • static이 없으면 인스턴스를 생성할 때마다 Heap에 따로 생성되는 변수 → 인스턴스 변수

🔹 예시:

public class Person {
    String name;         // 인스턴스 변수 (Heap)
    static int count = 0; // 클래스 변수 (Method Area)
}
  • count: 모든 객체가 공유하는 변수
  • name: 객체마다 별도 보유하는 변수

✅ 4. 메모리 구조와 변수의 생명주기

┌────────────┐
│ Method Area│ ← static 변수 (클래스 변수)
└────────────┘
     ↓
┌────────────┐
│    Heap    │ ← 인스턴스 변수 (객체마다 다름)
└────────────┘
     ↓
┌────────────┐
│    Stack   │ ← 지역 변수, 매개변수
└────────────┘
  • 인스턴스 변수는 Heap에 존재하며 객체가 참조되는 동안 살아있음
  • 참조가 사라지면 GC(Garbage Collector)가 제거함
  • 클래스 변수는 클래스 로딩 시 Method Area에 올라가고 종료 전까지 유지
  • 지역/매개 변수는 메서드 호출 시 Stack에 올라가고, 종료 시 사라짐

✅ 기타 팁

🔸 파일 이름과 클래스 이름이 다르면?

// 파일명: Hello.java
public class Hello {} // ✅

// 파일명: test2.java
public class Hello {} // ❌ 오류 발생 (이름 불일치)

🔸 java 실행 시 클래스 못 찾는 경우

java -cp . ClassName

-cp .은 "현재 디렉토리를 클래스 경로로 지정"하는 뜻


✍️ 마무리

자바는 단순 문법 외에도 메모리 구조, 객체 생명주기, 클래스 로딩 방식을 이해해야 정확히 작동 원리를 알 수 있습니다.

Day 1에서는 단순히 코드를 외우기보다, "왜 이렇게 동작하는가"를 중심으로 깊이 이해하는 것이 중요했습니다.

아직 많이 초반 단계라 제가 궁금했던 파트들이 나오지 않아 아는 내용들은 빠르게 넘겼습니다~!