Skip to content

Latest commit

 

History

History
220 lines (174 loc) · 6 KB

2024-05-17.md

File metadata and controls

220 lines (174 loc) · 6 KB

날짜: 2024-05-17


🌤️ 스크럼

  • 학습 목표 1 : 자바의 클래스/인스턴스 변수 초기화 공부하기

⚡️ 새로 배운 내용

1. [JAVA] 클래스/인스턴스 변수 초기화 순서

클래스란?

  • 객체를 생성하기 위한 설계도
public class Car {
    String color;
    int speed;
}

인스턴스란?

  • 클래스를 기반으로 생성된 객체
Car myCar = new Car();

myCar는 Car 클래스의 인스턴스이자 객체이다.


  • 멤버 변수

    • 클래스 내부에 선언된 변수
    • 인스턴스 변수, 클래스 변수(static 변수)로 나뉜다.
      • 인스턴스 변수: 객체마다 별도로 생성되는 변수
      • 클래스 변수: 모든 객체가 공유하는 변수
    public class Car {
      // 인스턴스 변수
      String model; // 각 객체마다 다른 값을 가질 수 있음
      int wheels; // 각 객체마다 다른 값을 가질 수 있음
    
      // 클래스 변수 (static 변수)
      static int numberOfCars = 0; // 모든 객체가 공유하는 변수
    
      // 생성자
      Car(String model, int wheels) {
          this.model = model;
          this.wheels = wheels;
          numberOfCars++; // Car 객체가 생성될 때마다 증가
      }
    
      // 인스턴스 메서드
      void display() {
          int localVariable = 0; // 지역 변수
          System.out.println("Model: " + model);
          System.out.println("Wheels: " + wheels);
      }
    
      // 클래스 메서드 (static 메서드)
      static void displayNumberOfCars() {
          System.out.println("Number of cars: " + numberOfCars);
      }
    }
    • 기본값

      • int, short, byte: 0
      • long: 0L
      • float: 0.0f
      • double: 0.0d 또는 0.0
      • char: '\u0000'
      • boolean: false
      • 객체 참조 변수: null
    • 멤버 변수의 초기화 방법

      • 명시적 초기화
        변수 선언과 동시에 초기화, 대입연산자(=) 사용
      • 생성자
        인스턴스 생성 시 초기화
      • 초기화 블록 생성자 호출 전에 실행되는 블록으로, 생성자의 중복을 줄이기 위해 사용된다.
        • 클래스 초기화 블록: static {}
        • 인스턴스 초기화 블록: {} (거의 사용x)
  • 클래스 변수(cv) 초기화 순서

    • 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번 초기화

    • 초기화 순서

      1. 기본값 모든 클래스 변수는 자동으로 기본값으로 초기화된다.
      2. 명시적 초기화 클래스 변수를 선언할 때 초기값을 지정할 수 있다.
      3. 클래스 초기화 블록
        클래스가 로딩될 때 실행되며, 클래스 변수를 초기화하는 데 사용된다.
        여러 개의 클래스 초기화 블록이 있을 경우, 순서대로 실행된다.
    • 소멸 시기 : 프로그램 종료 시

  • 인스턴스 변수(iv) 초기화 순서

    • 초기화 시점 : 인스턴스가 생성될 때마다 초기화

    • 초기화 순서

      1. 기본값
        모든 인스턴스 변수는 자동으로 기본값으로 초기화된다.
      2. 명시적 초기화
        인스턴스 변수를 선언할 때 초기값을 지정할 수 있다.
      3. 인스턴스 초기화 블록
        인스턴스가 생성자가 호출되기 전에 실행되며, 모든 생성자에 공통적으로 적용된다.
      4. 생성자
        생성자가 호출되면서 인스턴스 변수를 초기화한다. 생성자는 객체가 생성될 때마다 호출되며, 인스턴스 변수를 초기화하는 데 사용된다.
    • 소멸 시기 : 참조하지 않을 시 가비지 컬렉터에 의해 소멸

  • 코드로 보기

    class InitTest {
    
      // 명시적 초기화
      static int cv = 1;
      int iv = 1;
    
      // 클래스 초기화 블록
      static { cv = 2; }
    
      // 인스턴스 초기화 블록
      { iv = 2; }
    
    
      // 생성자
      InitTest() {
         iv = 3;
      }
    }
    클래스 초기화 인스턴스 초기화
    기본값 명시적 초기화 클래스 초기화 블록 기본값 명시적 초기화 인스턴스 초기화 블록 생성자
    cv 0 cv 1 cv 2 cv 2 cv 2 cv 2 cv 2
    iv 0 iv 1 iv 2 iv 3
    1 2 3 4 5 6 7
    • 클래스 초기화
      1. cv가 메모리(method area)에 생성되고, 기본값 0으로 초기화된다.
      2. 명시적 초기화(int cv=1)에 의해 cv의 값이 1로 초기화된다.
      3. 클래스 초기화 블록(cv=2)에 의해 cv의 값이 2로 초기화된다.
    • 인스턴스 초기화
      1. InitTest 클래스의 인스턴스가 생성되면서 iv가 메모리(heap)에 생성되고, 기본값 0으로 초기화된다.
      2. 명시적 초기화(int iv=1)에 의해 iv의 값이 1로 초기화된다.
      3. 인스턴스 초기화 블록(iv=2)에 의해 iv의 값이 2로 초기화된다.
      4. 생성자(iv=3)에 의해 iv의 값이 3으로 초기화된다.

🔥 오늘의 도전 과제와 해결 방법


🤔 오늘의 회고

  • 스크럼 중 완료한 작업: 자바의 클래스/인스턴스 변수 초기화 공부하기
  • 자바의 변수 분류와 클래스 내에서 변수들이 어떤 순서로 초기화되는지에 대해 공부했다.
  • 자바의 runtime data area와 연결지어 생각해볼 수 있었다.

참고 자료 및 링크