유튜브에서 코딩 교육 채널을 운영하고 있는 나도코딩입니다.
누구나 쉽고 재미있게 코딩을 공부하실 수 있도록 친절한 설명과 쉬운 예제로 강의합니다.
코딩, 함께 하실래요? 😊
🧡 유튜브 나도코딩
🎁 코딩 자율학습 나도코딩의 파이썬 입문
📚 코딩 자율학습 나도코딩의 C 언어 입문
강의
로드맵
전체 1수강평
- 파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
게시글
질문&답변
동기화
안녕하세요?네 맞습니다.문의글에 남겨주신 코드는 아래와 같이 예외를 발생시키는 부분이 있기 때문에 도중에 문제가 발생하기는 하지만 이 부분이 없다면 말씀주신 것처럼 for 반복문으로 1-5 까지 5개씩의 반복을 2개 만들었기 때문에 총합 10개의 방을 청소하게 됩니다. if (i == 2) { throw new RuntimeException("못해먹겠다!!"); }연습삼아 for 반복문 내 조건을 5가 아닌 다른 값으로 바꿔보시면 그에 맞게 증가하는 것을 확인하실 수 있을 거에요 🙂 가령 8로 설정하게 되면 2명이 8개의 방을 청소하게 되므로 16까지 출력이 될 것입니다.감사합니다.
- 0
- 2
- 11
질문&답변
Iterator 문의
안녕하세요?먼저 첫 번째 질문에 답변 드립니다.작성해주신 두 코드는 같은 로직을 수행하며, 예제의 상황에서는 동작에 아무런 차이가 없습니다.다만 String s 변수에 값을 담아두는 경우 아래와 같은 이점이 있을 수 있어요.이후에 해당 객체를 여러 번 참조하거나 다른 로직에 활용하기 쉬워요.코드를 확장하거나 디버깅할 때 수월할 수 있어요.결론적으로 동작 자체에는 문제도 없고 차이도 없습니다. 단, 해당 값을 여러 곳에서 재사용할 필요가 있다거나, 현재 순회에서의 값은 무엇인지 디버깅 등을 통해 확인하고자 하는 경우에는 String s 변수로 두는 것이 유리할 수 있습니다. 이러한 필요에 따라 코드를 어떠한 스타일로 작성할지 결정하시면 됩니다 :) 두 번째 질문에 답변 드립니다.먼저 코드 1과 코드 2의 동작은 다르게 작성되었습니다. [코드 1]it = list.iterator(); while (it.hasNext()) { String s = it.next(); // it.next() 를 한 번만 수행 if (s.contains("(알 수 없음)")) { it.remove(); // 삭제 } } it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } [코드 2]it = list.iterator(); while (it.hasNext()) { String s = it.next(); // 1) it.next() 를 처음 실행 if (s.contains("(알 수 없음)")) { it.remove(); // 삭제 } else { System.out.println(it.next()); // 2) it.next() 를 한 번 더 실행 } }코드 1에서는 하나의 반복 내에서 it.next() 를 한 번만 수행하는 반면에 코드 2에서는 it.next() 를 처음 실행하고 나서 else 구문을 만나게 되면 한 번 더 수행을 하게 됩니다. 다음 순회로 바로 건너 뛰어버리는 것이죠. 즉 하나의 반복에서 2개의 요소를 꺼내게 되는 경우가 발생하게 됩니다. 이는 의도와는 다른 동작이 되는 것인데요.이를 방지하기 위해서는 첫 번째 질문에서 답변드린 것처럼 코드를 아래와 같이 수정하시면 됩니다. 출력하는 부분에 it.next() 대신 s 변수를 활용하는 것입니다.it = list.iterator(); while (it.hasNext()) { String s = it.next(); // 1) it.next() 를 한 번만 실행 if (s.contains("(알 수 없음)")) { it.remove(); // 2) 삭제 } else { System.out.println(s); // 3) 삭제 대상이 아니라면 출력 } }이렇게 수정 후 다시 한번 확인을 부탁드리며, 궁금증 해결에 도움되길 바라겠습니다 🙂감사합니다.
- 0
- 1
- 17
질문&답변
코드 순서 문의
안녕하세요?자바에서 클래스 내 메소드의 정의 순서는 코드의 동작에 영향을 주지 않아요. 그래서 강의에서 정의한 순서나, 김재훈님께서 정의하신 순서나 동작은 동일합니다. 그 메소드가 어디엔가 잘 정의만 되어 있으면 문제가 없답니다 😊풀이해주신 코드도 배열과 반복문을 활용하여 강의에서 알려드린 코드보다 더 잘 작성해주셨습니다 👍감사합니다.
- 0
- 1
- 22
질문&답변
클래스 메소드
public, private 관련하여 질문 주신 부분은 클래스 단원의 '접근 제어자' 부분을 확인해주시면 좋겠습니다. public 과 private 의 차이가 무엇인지, protected 는 무엇인지, 어디까지 접근을 허용하는지 등에 대한 이해가 필요한 부분이며, 참고하실 수 있는 설명이 잘 되어 있는 링크로 답변을 드리도록 하겠습니다 😊👉 https://velog.io/@damhee6624/JAVA-%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90-public-protected-default-private
- 0
- 2
- 36
질문&답변
클래스 메소드
안녕하세요?인스턴스 변수와 클래스 변수는 잘 이해하셨습니다.인스턴스 메소드와 클래스 메소드의 차이는 조금 잘못 이해하신 부분이 있습니다.둘의 가장 큰 차이는 바로 '객체'인데요. 인스턴스 메소드는 특정 객체에 속한 메소드로 객체가 생성되어야만 호출이 가능합니다. 이 메소드 내에서는 그 객체만이 가지는 값 (인스턴스 변수) 을 활용하여 어떤 작업이 진행될 수 있으므로 객체마다 동일한 인스턴스 변수를 출력하더라도 그 값은 모두 다를 수 있습니다. 메소드는 static 키워드 없이 정의합니다.클래스 메소드는 클래스에 속한 메소드로 객체 생성 없이 호출합니다. 보통 클래스 이름을 통해 호출하며, 메소드 내에서는 클래스 변수만 사용할 수 있고, 객체가 없으므로 인스턴스 변수는 사용할 수 없습니다. 메소드는 static 키워드를 사용하여 정의합니다.파라미터는 인스턴스 메소드나 클래스 메소드 모두 정의하기 나름이기 때문에 없을 수도 있고 여러 개가 있을 수도 있습니다. 클래스 메소드에 별도로 입력 받을 파라미터가 필요 없다는 문장은 틀렸습니다.또한 인스턴스 메소드의 반환형을 void 로 정의한다고 해서 반드시 출력값이 필요한 것은 아닙니다. 보통 반환값이 있으면 그 값을 반환해주는 것으로 호출한 곳에서는 반환 결과를 확인할 수 있는데, 반환값이 없으면 따로 확인할 수 있는 부분이 없기 때문에 눈으로 확인을 시켜드리고자 출력문을 추가한 것입니다. 실무에서는 메소드 내에 출력문이 하나도 없는 경우가 매우 많습니다.그러므로 수업에서 다루는 많은 출력문들은 수업의 이해도를 높이기 위한 용도, 또는 실무에서의 상황이라면 메소드가 잘 호출되는지, 값은 올바로 들어가있는지 등 로그를 남기기 위한 용도라고 이해해주시면 좋겠습니다 😊감사합니다.
- 0
- 2
- 36
질문&답변
Quiz_05 관련 질문드립니다 !
안녕하세요?위 코드는 배열의 순회 관련하여 수업 내용 복습 차원에서 일부러 분리한 것이며, 김재훈님께서 작성해주신 코드가 훨씬 간결하고 불필요한 중복 순회를 막을 수 있습니다. 😊감사합니다.
- 0
- 2
- 26
질문&답변
다운로드가 안됩니다
안녕하세요?환경 설정 관련한 부분이라 몇 차례 확인이 필요할 수도 있습니다.먼저 강의에서 안내드리는 JDK 1.8 버전은 잘 설치를 해주셨나요? 그리고 IntelliJ 에서 File > Project Structure > Platform Settings 의 SDKs 를 선택하시면 화면에 목록이 어떻게 존재하나요? (사진)(사진) 또한 같은 화면에서 Project Settings 의 Project 부분도 클릭하였을 때 SDK 는 어떻게 설정되어 있나요?위 내용들 다시 캡처해주시면 확인 후 도움 드리겠습니다 😊감사합니다.
- 0
- 2
- 57
질문&답변
다형성
안녕하세요?먼저 코드를 살펴 보면 camera, factoryCam, speedCam 은 각각 아래와 같이 정의되어 있습니다.Camera camera = new Camera(); Camera factoryCam = new FactoryCam(); Camera speedCam = new SpeedCam();그리고 instanceof 를 사용하는 코드는 이렇게 되어 있지요. if (camera instanceof Camera) { System.out.println("카메라입니다."); } if (factoryCam instanceof FactoryCam) { ((FactoryCam) factoryCam).detectFire(); } if (speedCam instanceof SpeedCam) { ((SpeedCam) speedCam).checkSpeed(); ((SpeedCam) speedCam).recognizeLicensePlate(); }이 곳에서 FactoryCam, SpeedCam 등으로 형 변환을 해야 하는 이유에 대해서 궁금하신 것 같습니다.앞서 선언한 camera, factoryCam, speedCam 는 모두 Camera 타입이므로 Camera 클래스 내에 있는 메소드(takePicture 등)는 호출 가능하지만 FactoryCam 이나 SpeedCam 에 있는 메소드는 직접적으로 호출이 불가능해요. Camera 클래스 내에서는 checkSpeed(), detectFire() 와 같은 메소드가 정의되지 않았거든요.하지만 상속 관계에 있는 경우에는 자식 클래스로 형 변환을 하면 자식 클래스에 정의된 메소드 호출이 가능해진답니다. 마치 다음 코드처럼 Camera 가 아닌 FactoryCam, SpeedCam 으로 선언했듯이 말이죠.Camera camera = new Camera(); FactoryCam factoryCam = new FactoryCam(); SpeedCam speedCam = new SpeedCam();위 코드에 의하면 factoryCam 객체는 FactoryCam 클래스의 모든 메소드와 부모 클래스인 Camera 의 메소드에 접근이 가능합니다. speedCam 또한 SpeedCam 클래스의 모든 메소드와 부모 클래스인 Camera 의 메소드에 접근이 가능해지는 것이죠.따라서 앞의 예제에서도 FactoryCam 이나 SpeedCam 에 있는 메소드를 호출하기 위해서는 형 변환이 필요하답니다.궁금증 해결에 도움되길 바라겠습니다 😊감사합니다.
- 0
- 2
- 38
질문&답변
HashMap
안녕하세요?인프런 AI 인턴이 답변한 것처럼, 자바에서 HashMap과 같은 제네릭 클래스(타입 매개변수를 갖는 클래스)를 사용할 때, 그 안에 들어가는 타입은 반드시 객체 형태여야 합니다. int, double, boolean 과 같은 기본 자료형은 객체가 아니기 때문에 직접 사용할 수는 없으며 대신 이들의 Wrapper Class 인 Integer, Double, Boolean 등의 형태로 사용하셔야 합니다. 😊감사합니다.
- 0
- 2
- 30
질문&답변
재생이 안됩니다ㅠㅠ
안녕하세요?먼저 학습에 불편드려 대단히 죄송합니다.현재는 확인 결과 동영상 재생이 잘 되는 것 같습니다.일시적으로 인프런 서비스에 문제가 있었던 것 같은데, 혹시 여전히 안되신다면 답글 남겨주시면 인프런 측에 문의해보도록 하겠습니다. 😊감사합니다.
- 0
- 2
- 54