게시글
질문&답변
2024.05.25
코드 오류?
안녕하세요? getColor() 메소드 바로 윗줄에 닫는 중괄호 } 가 누락된 것으로 보입니다. else { this.price = price; } String getColor() { return color; } 위 부분을 아래와 같이 수정한 뒤에 다시 실행해보세요. else { this.price = price; } } // 닫는 괄호 추가 String getColor() { return color; } 수정 후에도 에러가 발생한다면 작성하신 전체 소스코드를 첨부해주시면 확인 후 도움드리겠습니다 😊 감사합니다.
- 0
- 3
- 60
질문&답변
2024.05.23
Runtest 오류
안녕하세요? 말씀해주신 상황이 발생했을 때 전체 화면을 캡처해서 보여주시면 보다 확인이 쉽습니다. 07 클래스의 괄호 오류가 발생하는 부분에 앞뒤 괄호 쌍이 맞지 않거나 실수로 괄호가 하나 추가되어서 그런 것으로 예상이 되네요. 프로젝트 내 다른 파일에 오류가 발생하는 경우 현재 파일의 실행이 되지 않을 수 있습니다. 이런 현상을 없애기 위해서는 소스코드 상의 오류를 없애거나 아니면 다음 답변의 내용을 참고하셔서 해당 파일을 제외하는 방법이 있습니다. 👉 https://www.inflearn.com/questions/1027104 잘 해결이 되지 않으면 캡처 화면과 함께 다시 질문글을 남겨주시면 확인 후 도움드리겠습니다 😊 감사합니다.
- 0
- 1
- 49
질문&답변
2024.05.04
강의 스트리밍 에러
안녕하세요? 먼저 학습에 불편드려 대단히 죄송합니다. 인프런에서 스트리밍 끊김 현상은 과거에 비해 많이 개선이 된 것으로 알고 있지만 Q&A 를 찾아보니 여전히 일부 수강생 분들은 최근에도 불편을 겪고 계신 것으로 파악이 됩니다. 그런데 시크릿 모드에서는 정상적으로 스트리밍이 잘 되고, 일반 모드에서 학습하실 때 문제가 되고 있는지요? 만약 그렇다고 하시면 어쩌면 사용하시는 브라우저의 설정을 일부 건드려 보는 것으로 개선이 될 수 있는지 확인해보는 것도 좋을 것 같습니다. 자꾸 끊기는 현상으로 스트레스가 많으시겠지만, 도움이 될 수 있어 보이는 링크를 다음과 같이 공유해드리니 시간이 된다면 한 번 시도를 부탁 드립니다. 크롬 기준으로 설명이 되어 있습니다. 👉 https://funissu.com/chrome-youtube-stuck-lag-stuttering/ 또는 사용하시는 브라우저의 종류를 다른 것으로, 가령 크롬을 사용하신다면 엣지로 변경해 보시는 것도 방법이 될 수 있습니다. 스트리밍이 잘 되기만 한다면 기존 시크릿 모드에 비해서는 로그인에 대한 부담을 크게 덜어드릴 수 있어 보입니다. 벌써 강의를 70% 이상 수강 하셨는데, 그간 많이 불편하셨을 것으로 생각됩니다. 부디 위 방법으로 조금이나마 개선이 될 수 있기를 바랍니다. 감사합니다.
- 0
- 4
- 137
질문&답변
2024.04.25
14 출력이 강의와 다릅니다.
안녕하세요? 바로 윗줄에서 %n 을 누락하여 발생한 현상입니다. System.out.printf("%6.2s", "Java"); // 수정 전 System.out.printf("%6.2s%n", "Java"); // 수정 후 윗줄에서 %n 이 없으니 줄바꿈이 되지 않았으며, 6자리 공간을 확보하고 우측 정렬하여 2글자인 Ja 를 먼저 출력하지요. (1) _ _ _ _ J a System.out.printf("%-6.2s%n", "Java"); 그런 다음에 이어서 위 코드를 실행하게 되니, 6자리 공간을 확보하고 좌측 정렬하여 2글자인 Ja 를 출력하게 됩니다. 즉 (2) J a _ _ _ _ 가 되겠네요. 그런데 둘 사이에 줄바꿈이 없으므로 (1) _ _ _ _ J a (2) J a _ _ _ _ 가 합쳐져서 실제로 보기에는 _ _ _ _ J a J a _ _ _ _ 이렇게 보여지게 된 거에요. 보다 더 확실히 차이를 확인하고 싶다면 이렇게 해보시면 되겠네요. System.out.printf("%6.2s", "ABCD"); // 처음 두 글자 AB System.out.printf("%-6.2s%n", "EFGH"); // 처음 두 글자 EF 위 예제에서는 각각 출력 문장이 (1) _ _ _ _ A B (2) E F _ _ _ _ 이렇게 될텐데, %n 에 해당하는 줄바꿈이 없으니 둘이 합쳐져서 _ _ _ _ A B E F _ _ _ _ 이렇게 출력이 되겠네요 😊 감사합니다. 덧) 첫 번째 스크린샷 이미지는 코드가 잘려서 정확한 확인은 어렵지만 아마도 동일하게 코드 윗줄에서 %n 을 누락하신 것 같아요 😋
- 0
- 1
- 63
질문&답변
2024.04.25
7장에서 메소드 영상을 보다가 궁금한 점이 있어서 연락드립니다.
안녕하세요? 문의주신 내용은 아마도 아래 코드에 대한 질문인 것 같군요 😀 int getVideoFileCount(int type) { if (type == 1) { // 일반 영상 return 9; } else if (type == 2) { // 이벤트 영상 return 1; } return 10; } 말씀하신 것처럼 첫 번째 if 문의 조건을 확인하여 참이면 if 문 내의 문장이 실행되고, 그 이후에는 if 문 밖으로 빠져나와서 이어서 계속하여 코드가 실행되는 것은 맞습니다. void printColor(int color) { if (color == 1) { System.out.println("파란색"); } else if (color == 2) { System.out.println("빨간색"); } System.out.println("색을 출력했어요"); } 만약 위와 같이 코드가 되어 있었고 전달 받은 color 변수가 1 이라면 파란색 색을 출력했어요 color 변수가 2라면 빨간색 색을 출력했어요 그 외의 값이라면 색을 출력했어요 가 출력될 것입니다. 하지만 문제는 바로 return 이에요. 메소드 내에서 return 을 만나면 그 즉시 메소드를 탈출하게 됩니다. 이후에 실행될 코드가 더 있건 말건 상관 없이 말이죠! 마치 아래 코드처럼 생각하시면 됩니다. 이 코드를 작성해보면 void printColor(int color) { return; System.out.println("파란색"); System.out.println("빨간색"); System.out.println("색을 출력했어요"); } 아래와 같이 Unreachable statement 라며 에러가 발생하게 됩니다. 첫 줄의 return; 에 의해 바로 메소드를 탈출하게 되므로 이후에 있는 print 구문들은 실행조차 되지 않으니 확인해보라는 의미인 것이죠. (사진) 다시 원래 코드로 돌아와서, int getVideoFileCount(int type) { if (type == 1) { // 일반 영상 return 9; } else if (type == 2) { // 이벤트 영상 return 1; } return 10; } type 이 만약 1인 경우에는 return 9; 의 동작이 실행되면서 메소드를 바로 탈출하게 되고 이와 동시에 9 를 반환하게 됩니다. 그래서 if 문 밖에 있는 코드인 return 10 은 아예 실행이 되지 않는 것이랍니다. 궁금증 해결에 도움되길 바라겠습니다 😊 감사합니다.
- 0
- 1
- 77
질문&답변
2024.03.31
퀴즈 13 질문입니다.
안녕하세요? 새로운 질문을 작성하시기 전에 작성된 질문이 올바로 삭제되지 않은 문제가 있었던 것 같습니다 😅 아래 링크에 답변을 작성하고 새로운 질문을 확인 중인데 제가 말씀드린 소스코드가 이번 질문에서는 순서가 올바로 작성되었네요! 👉 https://www.inflearn.com/questions/1223648 결과적으로 코드를 잘 작성해주셨습니다. 파일의 내용을 읽어와서 어떤 작업을 할 때 일반적으로는 while (true) { ... } 와 같은 무한 반복문 보다는 작성해주신 것처럼 while ((line = br.readLine()) != null) { ... } 와 같은 코드를 많이 사용합니다. 혹시 어떤 문제로 반복문을 올바로 탈출하지 못하고 계속 반복하는 경우를 방지하기 위해서 그렇습니다. 그리고 (속담 퀴즈입니다 ~ 수고하셨습니다) 부분을 try catch 문 외부에 넣거나 내부에 넣거나 큰 차이는 없습니다. 다만 (수고하셨습니다) 부분이 try catch 외부에 있게 되면 try 문 내에서 어떤 문제가 발생하여 퀴즈가 올바로 진행되지 않았을 경우에도 (수고하셨습니다) 라는 문장이 출력되는 경우가 발생할 수 있겠네요. 사용자는 퀴즈를 하나도 풀지 못했는데 수고했다는 메시지를 출력하면 프로그램의 동작이 다소 매끄럽지 않을 수 있습니다. 이런 경우에는 try catch 내에서 (수고하셨습니다) 라는 메시지를 출력하되, 예상치 못한 오류에 대비하여 catch 문 내에서 (문제가 발생하여 퀴즈가 올바로 진행되지 않았습니다) 정도의 메시지를 출력하면 더 좋을 것 같습니다 😊 감사합니다.
- 0
- 2
- 103
질문&답변
2024.03.31
퀴즈13 질문입니다.
안녕하세요? 작성해주신 코드를 그냥 실행했을 때는 퀴즈가 바로 제시되지 않고 사용자 입력을 기다리는 문제가 있었습니다. 그래서 다음과 같이 while 문 내에서 주석으로 1, 2 작성한 부분의 코드를 수정해봤어요. while ((line = br.readLine()) != null) { System.out.println(line); // 2. 이 곳으로 이동하여 문제 먼저 출력 String answer = br.readLine(); String input = sc.next(); // System.out.println(line); // 1. 이 곳에 있던 코드를 System.out.print("정답 입력 ==> "); if (input.equals(answer)) { System.out.println("정답입니다!!!"); } else { System.out.println("틀렸습니다. 정답은 " + answer); } } 이렇게 했을 때 다음과 같이 올바로 퀴즈를 진행할 수 있었네요. 속담 퀴즈입니다. 빈 칸에 알맞은 말을 입력하시오. (주관식) ------------------------------------------------- (문제) 세 살 __ 여든까지 간다 정답 입력 => 버릇 정답입니다!!! (문제) 소 잃고 ___ 고친다 정답 입력 => 화장실 틀렸습니다. 정답은 외양간입니다. (문제) 천 리 길도 한 __부터 정답 입력 => 끼니 틀렸습니다. 정답은 걸음입니다. ------------------------------------------------- 모든 퀴즈가 완료되었습니다. 수고하셨습니다. ^^ 결과적으로 코드를 잘 작성해주셨습니다. 파일의 내용을 읽어와서 어떤 작업을 할 때 일반적으로는 while (true) { ... } 와 같은 무한 반복문 보다는 작성해주신 것처럼 while ((line = br.readLine()) != null) { ... } 와 같은 코드를 많이 사용합니다. 혹시 어떤 문제로 반복문을 올바로 탈출하지 못하고 계속 반복하는 경우를 방지하기 위해서 그렇습니다. 그리고 (속담 퀴즈입니다 ~ 수고하셨습니다) 부분을 try catch 문 외부에 넣거나 내부에 넣거나 큰 차이는 없습니다. 다만 (수고하셨습니다) 부분이 try catch 외부에 있게 되면 try 문 내에서 어떤 문제가 발생하여 퀴즈가 올바로 진행되지 않았을 경우에도 (수고하셨습니다) 라는 문장이 출력되는 경우가 발생할 수 있겠네요. 사용자는 퀴즈를 하나도 풀지 못했는데 수고했다는 메시지를 출력하면 프로그램의 동작이 다소 매끄럽지 않을 수 있습니다. 이런 경우에는 try catch 내에서 (수고하셨습니다) 라는 메시지를 출력하되, 예상치 못한 오류에 대비하여 catch 문 내에서 (문제가 발생하여 퀴즈가 올바로 진행되지 않았습니다) 정도의 메시지를 출력하면 더 좋을 것 같습니다 😊 감사합니다.
- 0
- 3
- 104
질문&답변
2024.03.31
수업질문입니다
안녕하세요? 클래스 단원의 시작 부분에서 객체 지향 프로그래밍 (OOP : Object-Oriented Programming) 에 대한 특징을 살펴보면서 유지보수 용이, 그리고 말씀하신 높은 재사용성에 대해 설명 드렸습니다. 자바는 객체 지향 프로그래밍의 한 종류이며 이 외에도 C++, C#, Python 등 여러 객체 지향 프로그래밍 언어가 있어요. 객체 지향 프로그래밍 언어 중 하나인 자바의 높은 재사용성은 다음 이유로 설명될 수 있습니다. 상속과 다형성 자바에서는 새로운 클래스를 작성할 때 기존 클래스에서 필요한 기능을 상속 받아 사용하고, 이를 통해 동일한 코드의 중복을 줄이고 이미 작성된 코드를 재사용할 수 있습니다. 인터페이스와 추상 클래스 인터페이스와 추상 클래스를 사용하면 다양한 클래스가 동일한 인터페이스나 추상 클래스를 구현하거나 상속 받아 사용할 수 있으므로 재사용성이 높아집니다. 높은 재사용성이 자바라는 언어 하나만 가지는 특징은 아니랍니다 😊 감사합니다.
- 0
- 1
- 71
질문&답변
2024.03.19
반환값(RETURN) 에 대한 질문
안녕하세요? return 을 사용하게 되면 그 즉시 return 을 포함하는 메소드의 동작이 종료되고 메소드를 호출한 쪽으로 넘어가서 동작이 이어 진행됩니다. 이때 return 뒤에 어떤 값이 있다면 그 값을 반환하고, 메소드를 호출한 쪽에서는 이 값을 받아서 사용할 수 있게 되지요. (사진)위와 같이 getPhoneNumber() 메소드를 호출하게 되면 main() 메소드의 동작은 거기서 잠시 멈추고 getPhoneNumber() 메소드의 동작을 수행하게 돼요. 그런 다음에 이 메소드 안의 return 을 만나면 phoneNumber 를 main() 메소드에 반환하며 getPhoneNumber() 메소드의 동작은 끝이 난답니다. 그럼 처음에 이 메소드를 호출한 main() 메소드에서는 return 에 의해 반환된 phoneNumber 를 contactNumber 에 저장하고 이어서 아랫줄에 있는 호텔 전화번호를 출력하는 동작을 진행하게 되구요. getAddress() 또한 동일합니다. 이 메소드를 호출하게 되면 main() 메소드의 동작은 잠시 멈추고 getAddress() 메소드 안에 정의된 동작이 수행됩니다. 그런 다음 "서울시 어딘가" 를 return 에 의해 반환하게 되면 메소드의 동작도 끝이 나게 되고 main() 메소드에서는 address 라는 변수로 그 반환값을 받아서 다음 줄에서 호텔 주소를 출력할 수 있게 되는 순서로 동작하게 됩니다. 그림의 1~4 부분을 보시면 보다 이해가 수월하실 거에요 😊 감사합니다.
- 0
- 1
- 92
질문&답변
2024.03.14
메소드 강의 질문
안녕하세요? 클래스(Class)와 객체(Object)는 정말 정말 어렵고 헷갈리는 내용입니다. 이렇게 한 번 설명을 드려볼게요. 대중교통의 대표적인 종류로는 수많은 사람을 실어 나르는 버스가 있습니다. 도심에는 특히 굉장히 많은 노선의 버스가 운행되고 있지요. 버스는 운전 기사분께서 마음대로 운행을 할 수는 없습니다. 정해진 시간, 정해진 노선, 정해진 금액 등에 따라 운행을 하게 됩니다. 필요에 따라 기존 노선이 바뀔 수도 있고 새로운 노선이 생길 수도 있습니다. 그런데 사실 버스마다 조금씩 분위기가 다르기도 합니다. 어떤 기사님은 매우 친절히 인사를 하시기도 하지만 어떤 기사님은 가벼운 목례만 하거나 승객분들과 눈을 마주치지 않는 경우도 있습니다. 또 운전을 매우 부드럽게 하시는 분도 계시는가 하면 다소 난폭하게 하시는 분도 계십니다. 정해진 시간, 정해진 노선으로 운행을 하긴 하지만 약간씩의 차이가 있을 수 있지요. 지금까지 버스 요금은 성인 기준 1,000 원이었다고 가정하겠습니다. 그런데 내일부터 갑자기 1,200 원으로 버스 요금을 인상하겠다고 발표합니다. 그러면 버스를 이용하는 모든 승객은 내일부터 동일한 버스를 인상된 가격인 1,200 원을 지불하고 타야 합니다. 이것이 바로 클래스(Class) 와 객체(Object) 의 차이입니다. 클래스는 버스의 운행 노선, 주기, 금액 등을 설정하는 주체 개념입니다. 버스에 몇 명까지 태울 수 있고 입석을 허용할지, 운행 노선은 어떻게 되고 출퇴근 시간에는 자주 운행하도록 하여 시민들의 불편을 최소화할 수 있습니다. 그리고 이렇게 정해진 규칙에 따라 운행하는 각 버스들이 객체가 됩니다. 각 버스들마다 버스 번호, 노선, 운행 시간 정보 등이 설정됩니다. 이는 버스마다 조금씩 다를 수 있겠지요. 이 정보들이 클래스에 정의된 인스턴스 변수 라고 생각하시면 됩니다. 내일부터 인상되는 가격, 모든 버스가 공통적으로 따르며 한 번에 일괄적으로 변경사항이 적용되는 것이 바로 클래스 변수 입니다. 버스 단말기처럼 시스템에서 요금을 인상시키면 내일부터는 카드를 태깅할 때 모든 버스에서 공통적으로 1,200 원을 지불하게 됩니다. 각 버스 기사님이 승객들에게 일일이 "요금 인상" 이라는 안내를 할 필요가 없는 것이죠. 명절을 맞아 버스 요금을 한시적으로 50% 할인할 수도 있습니다. 그러면 클래스 변수인 가격 정보만 50% 할인된 600 원으로 설정하면 끝입니다. 모든 버스를 일일이 확인하여 할인 적용을 할 필요가 없지요. 정리하면, 어떤 정보를 가지고 어떻게 운행을 할지 등이 정의된 것이 클래스이며, 이렇게 정의된 내용에 따라 운행을 하는 각 버스들은 클래스로부터 만들어진 객체입니다. 이때 각 버스별로 내용이 정의되는 곳이 인스턴스 변수이며, 모든 버스에 공통적으로 적용되는 가격은 클래스 변수입니다. 우리가 실제로 코드로 볼 때는 클래스라는 것 하나만 있지만 그 클래스 안에 각각의 객체가 가질 서로 다른 값인 인스턴스 변수를 정의하며, 또한 모든 객체들에 공통적으로 적용되는 클래스 변수를 정의할 수 있습니다. 이때 인스턴스 변수는 객체의 이름으로 접근 하며, 클래스 변수는 클래스의 이름으로 접근 한다는 차이가 있습니다. 질문 주신 내용으로 돌아와서, canAutoReport 는 BlackBox 라는 클래스에 정의된 클래스 변수이므로 클래스명인 BlackBox 로 접근합니다. modelName 은 BlackBox 라는 클래스에 정의된 인스턴스 변수이며 이는 각각의 객체가 서로 다른 값을 가질 수 있으므로 객체의 이름인 b1 으로 접근할 수 있습니다. 설명이 매우 길었는데 차분히 한 번 읽어보시고 클래스와 객체의 차이점, 그리고 인스턴스 변수와 클래스 변수의 차이점을 이해해주시면 좋겠습니다. 😊 감사합니다.
- 0
- 1
- 104