• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

수업 1: 56 질문드립니다.

21.01.31 14:18 작성 조회수 902

0

package lec04.OOP14.third;

public class ConsOne {

public String cpuName;

public String gpuName;

ConsOne() {

this(cpuName: "amd", gpuName: "radeon");

}

ConsOne(String cpuName, String gpuName) {

this.cpuName = cpuName;

this.gpuName = gpuName;

}

}

1: 56 이랑 똑같이 작성했는대요.  9번  this 쓴 라인에서 이클립스에서 는 오류가 떠서요 ......

<오류내용>

Multiple markers at this line

- Cannot refer to an instance field gpuName while explicitly invoking a constructor

- Syntax error on token ":", invalid AssignmentOperator

- Cannot refer to an instance field cpuName while explicitly invoking a  constructor

- Syntax error on token ":", invalid AssignmentOperator

5: 32 에서도 같은 오류 가 뜨네요 . 똑같이 코딩했는데..... 제가 기초적인 부분도 잘 몰라서 그런건지 이클립스에서는  오류가 뜹니다. 

클래스에 참조변수를 통해서 값을 넣는건 잘되거든요.

답변 7

·

답변을 작성해보세요.

0

제가 질문 글에 좀 더 설명을 드릴게요.

보통 파라미터를 넣는 곳은 값만 들어가거나 변수명만 들어갑니다.

showMethod(parameter1, parameter2);

이런 식으로 들어갑니다.

자바 코드에서는 아직 11 버전까지는 파라미터가 들어가는 괄호 안에 =나 : 등의 특수 문자를 허용하지 않습니다.

물론 이건 절대적이라고 말씀 드릴 수 없는게,

원래 자바는 형태가 정해지지 않은 변수 타입을 인정하지 않았습니다.

var가 대표적이죠.

하지만 버전업이 되면서 var라는 변수 타입이 생기면서 변수의 타입을 변수 명 작명 시 확정하지 않았습니다.

자바스크립트의 var를 차용해 온 것이죠.

앞으로 자바가 발전하면서 나중에는 저의 이 강의에서 알려드린 것이 달라질 수도 있습니다.

하지만 현재는 파라미터는 =나 : 등의 특수기호는 허용하지 않는다.

괄호 안에는 값이나 변수명만 들어간다. 만 알고 계시면 좋습니다.

public void showMsg(int count, String name);

형태의 메서드를 작성하게 되면 이 메서드에는

showMsg(3, "goods");

이런 형태의 값이나

int intCount = 3;

String strGoods = "goods";

showMsg(intCount, strGoods);

이런 형태만 가능합니다.

이런 사실을 아시면 앞으로 강의를 보시는데 있어서 착오가 좀 더 줄어드실 겁니다.

그럼 제 강의를 완강해 주시길 바랍니다.

수강평도 부탁 드리겠습니다.

0

한 가지 더, 혹시 앞으로 강의에서 인텔리제이 화면(이클립스 화면하고 다릅니다.)에서 

회색 바탕으로 글씨가 써지는 것은 인텔리제이에서 자동 맵핑되는 내용이라고 아시면 좋습니다.

0

아이고... 일단 착오를 드려서 죄송합니다.

기초를 배우시는 분들은 착오를 하실 수 있다는 사실을 깨달았네요.

제가 해당 강의 찍을 때 사용한 툴은 intelliJ입니다.

저도 집에 와서 강의를 확인해 보니 강의를 보시는 분들은 그렇게 보이실 수 있다는 생각이 드는군요.

해당 구문은 질문자분께서 이해하신 그런 구문이 아닙니다.

cpuName:값 형태로 보일 때 앞에 키 값은 인텔리제이에서 자동으로 맵핑해서 보여주는 이름입니다.

이클립스에서 코딩하시면 

this(cpuName: "amd", gpuName: "radeon");

형태가 아니라

this("amd", "radeon");의 형태입니다.

제가 지금 IDE를 켜서 코드를 확인해도 정상적인데 왜 그러지하고 강의를 확인해 보니까

인텔리제이를 안 써보신 분들은 착오를 일으키실 수 있구나, 하는 생각이 들었습니다.

해당 코드 형태는 나중에 인텔리제이를 써보시면 아시게 되실 겁니다.

혹시 인텔리제이 커뮤니티 버전이라도 한 번 써보시는 것도 나쁘지 않을 것입니다.

앞으로 Servlet/JSP 강의를 찍을 건데 그때도 비슷한 경우가 생길 것 같아서,

최대한 이클립스로 찍도록 하겠습니다.

질문 감사합니다.

질문 안 해주셨으면 그런 착오를 일으킬 수 있다는 것을 모를 뻔 했습니다.

0

paikdabang 님의 프로필

paikdabang

질문자

2021.01.31

:  에서 ->  = 로 바꿔도 오류는 뜨네요 . 일단 빼고 값만 넣어서 다음으로 진행했습니다.   나중에 한번 확인 부탁드릴게요.

저는 자바 SE 1.8 쓰고 있습니다.

0

this가 무엇을 의미하는지 아시죠? 매개변수가 없는 생성자에서 다시 매개변수를 넣는 생성자를 호출하는 형태라는 점 이해가 되시면 좋겠습니다.

해당 형태, 변수:값은 주로 json 포맷 양식에서 쓰입니다. 자바 8 버전에서는 변수:값 형태가 거의 없다고 보시면 됩니다.

0

paikdabang 님의 프로필

paikdabang

질문자

2021.01.31

매개변수에   cpuName 하고 gpuName 빼고 값만 넣으니 잘나오네요 . 잘 해결된거 같습니다 ㅎ  

0

: 이게 에러이고 gpuName 참조변수에서 발생한다는 군요. 제가 밖이라서 테스트는 못하는 상황이지만 :를 =이걸로 바꿔보실래요? 저녁까지 해결이 안 되면 저도 테스트를 해보도록 하겠습니다. 일단 강의는 예제 교본을 만들어 가면서 하기 때문에 예제 코드에는 문제가 없습니다. 다 실행해 보고 만든 거거든요.