인프런 커뮤니티 질문&답변

skyjoon2님의 프로필 이미지
skyjoon2

작성한 질문수

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

Final

final 질문드리겠습니다.

해결된 질문

작성

·

355

0

public final String lens;

선언과 동시에 값을 초기화 하지 않고 선언만 한뒤

public ActionCam(){

lens ="광각렌즈"

}

기본생성자 내에서 이와같이 초기화 하는 케이스 있다고 설명해주셨습니다.

 

근데 기본생성자가 아닌 매개변수를 가지고 있는 생성자내에서

public void ActionCam2(String name){

lengs = "테스트"

}

와같이 선언한 경우는 lens 변수는 정의할수없다고 에러메시지가 뜨는데 기본생성자는 가능하고 매개변수가 있는 메소드는 불가능한 이유가 궁금합니다.

답변 1

3

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
먼저 final 에 대해서 아주 잘 이해해주셨습니다. 다만 코드상에 실수가 있네요 😅 ActionCam2 클래스의 생성자를 만드실 때 public 과 ActionCam2 사이의 void 가 있게 되면 이는 생성자가 아닌 일반 메소드가 됩니다. final 변수는 생성자에서만 초기화가 가능하므로 에러가 발생한 것이구요.

public void ActionCam2(String name){ // public ActionCam2(...) 로 변경해야 돼요
    lengs = "테스트"
}

코드를 다음과 같이 바꾸신 다음 실행해보시면 정상 동작을 확인하실 수 있습니다.

// ActionCam.java
public class ActionCam{
    public final String lens;
    public ActionCam() { // 기본 생성자
        lens = "광각렌즈";
    }
}
// ActionCam2.java
public class ActionCam2{
    public final String lens;
    public ActionCam2(String name) { // 매개변수가 있는 생성자
        lens = name;
    }
}
// Main.java
public class Main {
    public static void main(String[] args) {
        ActionCam cam = new ActionCam();
        System.out.println(cam.lens);

        ActionCam2 cam2 = new ActionCam2("망원렌즈");
        System.out.println(cam2.lens);
    }
}

실행 결과는 아래와 같습니다.

광각렌즈
망원렌즈

궁금증 해결에 도움되셨길 바라겠습니다 😊
감사합니다.

skyjoon2님의 프로필 이미지
skyjoon2

작성한 질문수

질문하기