inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

Getter 와 Setter

생성자편에서 this.serialNumber 를 넣는이유

226

cksdyd1111

작성한 질문수 2

0

 생성자편에 블랙박스 클래스에 this.serialNumber에 디스를 붙이는이유가 무엇인가요?

그리고 인스턴스변수 int serialNumber; 생성하지않고 클래스변수

static int counter = 0; 으로 바로생성해도 되지 않나요?

java 객체지향

답변 1

0

나도코딩

안녕하세요?

만약 다음과 같이 전달값을 받지 않는 생성자라면 생성자 내에서 this 를 사용하지 않아도 괜찮습니다. 객체를 먼저 생성하고 나서 main() 메소드에서 차례대로 값을 설정할 수도 있지요.

BlackBox() {
    System.out.println("기본 생성자 호출");
}

하지만 전달값을 받아서 객체 생성과 동시에 값 초기화를 하는 경우라면 어떨까요? 만약 modelName 을 전달받아서 바로 설정한다고 가정하면 전달받은 modelName 과 인스턴스 변수 modelName 의 이름이 같기 때문에 서로를 구분하기 위해서 this. 의 사용이 필요해진답니다.

BlackBox(String modelName) {
    // 인스턴스 변수 modelName 에 전달값 modelName 을 대입
    this.modelName = modelName; 
}

물론 이런 식으로 서로의 이름이 다르다면 this. 는 사용하지 않아도 무방합니다.

BlackBox(String name) {
    // 인스턴스 변수 modelName 에 전달값 name 을 대입
    this.modelName = name; 
}

int serialNumber 는 제품(BlackBox 로부터 만들어지는 객체)마다 서로 다른 고유의 번호를 가지기 위한 변수입니다. counter 변수를 통해 1씩 증가하도록 구현했는데요. 만약 serialNumber 라는 인스턴스 변수를 클래스 내에 정의하고 있지 않다면 b1 객체와 b2 객체의 serialNumber 를 알 수 있는 방법이 없습니다. 왜냐면 counter 변수는 static 으로 정의되어 모든 객체에서 공용으로 사용되기 때문에 객체마다 고유의 값을 저장하기 위한 별도의 변수가 필요해지는 것이죠.

그래서 다음과 같이 BlackBox 클래스를 간단히 정의하고 나서요.

public class BlackBox {
    int serialNumber;
    static int counter = 0;
  
    BlackBox() {
        this.serialNumber = ++counter;
    }
}

main() 메소드에서 이렇게 출력을 해보면 서로 다른 값을 확인할 수 있지만

BlackBox b1 = new BlackBox();
BlackBox b2 = new BlackBox();

System.out.println(b1.serialNumber); // 1
System.out.println(b2.serialNumber); // 2

위 코드에 이어서 이렇게 값을 찍어보면 같은 값을 확인할 수 있게 됩니다. 강의에서 의도한 것과는 다르죠.

System.out.println(b1.counter); // 2
System.out.println(b2.counter); // 2

궁금증 해결에 도움되었으면 좋겠습니다 😊
감사합니다.

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

93

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

186

3

JDK 버전 문의

0

129

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

121

2

Iterator 문의

0

105

1

코드 순서 문의

0

142

1

클래스 메소드

0

149

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

80

2