Java 생성자 변수 할당 헷갈림...

습토리·2025년 2월 26일
0

Java

목록 보기
27/32

📝 Java 생성자에서 변수 할당할 때 헷갈리지 않는 법!


🔹 내가 헷갈렸던 부분

Java에서 생성자를 만들 때, 아래 두 개의 코드가 헷갈렸다.

public Store(String product) {
    product = this.productType;  // ❌ 이렇게 하면 왜 안 될까?
}
public Store(String product) {
    this.productType = product;  // ✅ 이렇게 해야 제대로 작동!
}

처음에는 두 개가 같은 의미라고 생각했는데, 사실은 전혀 다르게 동작한다!
어떤 차이가 있는지 하나씩 살펴보자.


🔹 프로그래밍에서 ' = ' 의미

프로그래밍에서 ="같다"가 아니라 "대입(할당)"을 의미한다.
즉, 오른쪽에 있는 값을 왼쪽 변수에 저장하는 것!

this.productType = product;

👉 "product 값을 productType에 넣어라" 라는 뜻!

product = this.productType;

👉 "product 값을 productType의 값으로 바꿔라" 라는 뜻! (그런데 productType은 아직 값이 없음!)


🔹 올바른 코드의 동작 과정

public Store(String product) {
    this.productType = product;
}

✅ 이 코드가 실행되는 순서:
1. product는 생성자를 호출할 때 넘겨주는 값이다. (예: "pencil")
2. this.productType = product; 실행!

  • productType은 Store 클래스의 인스턴스 변수(필드).
  • product는 생성자에서 받은 매개변수.
  • 즉, product의 값을 productType에 저장!
  1. 결과적으로 productType"pencil"이 된다.

✔️ 이제 Store 객체를 만들면 올바르게 productType 값이 설정된다!

Store myStore = new Store("pencil");
System.out.println(myStore.productType);  // 출력: pencil

🔹 잘못된 코드의 문제점

public Store(String product) {
    product = this.productType;
}

❌ 이 코드의 실행 과정:
1. productType은 아직 값이 없음! (기본적으로 null)
2. product = this.productType; 실행

  • "product를 productType 값(null)으로 바꿔라"
  • 그러면 product = null;이 되어버림.
  1. productType에는 아무 값도 저장되지 않는다!

🚨 즉, 객체를 만들었지만 productType이 설정되지 않음!

Store myStore = new Store("pencil");
System.out.println(myStore.productType);  // 출력: null ❌

생성자에서 값을 설정하지 못했기 때문에 productType이 null이 됨!


🔹 이해하기 쉬운 비유 (택배 박스 📦)

이 개념을 쉽게 이해하려면 택배 박스와 상품으로 비유할 수 있다. 🎁

  • productType → 📦 택배 박스 (Store 클래스가 가지고 있는 변수)
  • product → 🎁 상품 (생성자로 전달받는 값)

잘못된 코드

product = this.productType;

📦 "택배 박스(productType)가 비었는데, 상품(product)이 그걸 복사하려고 함."
결과적으로 아무것도 할 수 없음!

올바른 코드

this.productType = product;

📦 "택배 박스(productType)에 상품(product)을 넣어줌."
이제 올바르게 productType이 설정됨!


🔹 결론

🔹 프로그래밍에서 =은 "같다"가 아니라 "대입(할당)"을 의미한다!
🔹 왼쪽(this.productType)이 바뀌는 대상이고, 오른쪽(product)이 그 값을 제공한다.
🔹 객체의 필드 값을 설정하려면 this.productType = product;을 사용해야 한다!

이제 생성자에서 변수를 설정할 때 this.productType = product;이 왜 맞는지 확실히 이해했다!
혹시 같은 문제로 헷갈리는 사람이 있다면, 이 글이 도움이 되길 바란다. (아마 그건 미래의 나....)


📝 추가 학습

  • Java 생성자 기본 개념
  • this 키워드의 역할
  • 객체와 인스턴스 변수의 차이
profile
재미난 삶을 살다

0개의 댓글