나도코딩
@nadocoding
수강생
103,893
수강평
3,415
강의 평점
4.9
유튜브에서 코딩 교육 채널을 운영하고 있는 나도코딩입니다.
누구나 쉽고 재미있게 코딩을 공부하실 수 있도록 친절한 설명과 쉬운 예제로 강의합니다.
코딩, 함께 하실래요? 😊
🧡 유튜브 나도코딩
🎁 코딩 자율학습 나도코딩의 파이썬 입문
📚 코딩 자율학습 나도코딩의 C 언어 입문
강의
로드맵
전체 1수강평
- 파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
- C 프로그래밍 - 입문부터 게임 개발까지
게시글
질문&답변
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
안녕하세요?네, 자연스러운 것입니다. 저도 새로운 기술을 배울 때 똑같은 생각을 합니다 😊분명 수업을 들을 때는 잘 이해가 되고 정리가 되었다고 생각했는데, 막상 퀴즈를 만나게 되면 머릿속이 하얘지더라구요 ㅎㅎ 하지만 제가 과거에 공부했던 시절을 돌아보면 노력은 결코 배신하지 않았습니다. 직접 퀴즈를 풀기 위해 스스로 고민을 해보고, 잘 안되면 다시 앞으로 넘어와서 배운 내용을 복습한 뒤에 응용해보고, 그래도 모르겠으면 해설을 보면서 따라서 코드를 치고 왜 이렇게 했는지를 이해하고 난 뒤에, 이해한 내용을 바탕으로 처음부터 다시 코드를 작성하면 처음보다는 훨씬 나아진 자신을 발견하게 될 거에요. 🙌작성하신 코드가 마음에 들지 않는다면, ChatGPT 나 Gemini 등에게 퀴즈와 코드를 주면서 '이 코드를 전문가가 작성한 것처럼 수정해줘' 라고 요청하면 더 잘 작성된 코드 샘플을 받아보실 수 있을테니, 적극 활용해보시는 것을 권해드립니다 😀감사합니다.
- 0
- 2
- 48
질문&답변
static이 뭐였는지 기억이 안나요 ㅜㅜ
안녕하세요?staitc 은 누구나 자바에 입문할 때 거의 다 한 번씩 헷갈리는 포인트입니다.한 줄 요약하자면 이렇습니다.👉 객체를 만들지 않아도 바로 사용할 수 있게 해주는 키워드아래 예시를 볼까요?class Person { public String name; public void sayHello() { System.out.println(name + "님, 안녕하세요"); } }이 클래스의 sayHello 메소드는 객체를 만들어야만 사용 가능합니다.이렇게 말이죠.Person p1 = new Person(); p1.name = "나도코딩"; p1.sayHello(); Person p2 = new Person(); p2.name = "어제코딩"; p2.sayHello();나도코딩님, 안녕하세요 어제코딩님, 안녕하세요여기서 p1 은 name 변수에 "나도코딩" 이라는 값이 적용된 객체, p2 는 "어제코딩" 이라는 값이 적용된 객체입니다. 둘은 서로 다르죠! 그런데 이런 경우는 어떨까요?class Calculator { public static int add(int a, int b) { return a + b; } }메소드(또는 클래스 내 변수) 앞에 static 이 붙으면 이 경우에는 객체를 만들 필요 없이 바로 사용 가능합니다. 이때는 객체 이름 대신 클래스 이름을 바로 쓰면 되지요.int result = Calculator.add(3, 5); System.out.println(result);8즉 static 키워드는 모두가 공통으로 쓰는 기능 또는 변수라고 생각을 하시면 좋습니다.학습에 도움되길 바라겠습니다 😊감사합니다.
- 0
- 2
- 29
질문&답변
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
안녕하세요?결론부터 말씀드리면, 질문자분께서 말씀하신 "x는 A의 메모리 주소를 가리키고, x를 통해 수정하면 실제 객체인 A 내부 값이 바뀐다"는 올바른 설명입니다.왜 코드가 그렇게 동작하는지, 세부 원리를 하나씩 살펴볼게요.1. 먼저 it.remove()는 리스트 자체를 수정합니다. 가장 중요한 포인트는 it.remove() 메소드의 역할인데요. Iterator는 단순히 리스트를 '읽기'만 하는 도구가 아니라, 리스트와 연결되어 그 내부 데이터를 직접 조작할 수 있는 통로입니다. 그래서 it.remove()를 호출하면, Iterator는 자신이 현재 가리키고 있는 원소를 list라는 원본 데이터 저장소에서 실제로 삭제한답니다. 즉, 첫 번째 while 문이 끝나면 메모리상에 있는 list 객체 자체가 이미 수정된 상태가 되는 거죠.2. 첫 번째 while문이 끝나고 다시 it = list.iterator()를 실행하는 코드는 다음과 같은 의미를 갖습니다.1) 초기화Iterator는 한 번 끝까지 가면 다시 앞으로 돌아올 수 없습니다. 그래서 처음부터 다시 읽기 위해 새로운 "커서(포인터)"를 리스트의 맨 앞에 놓는 작업입니다.2) 새로운 객체, 같은 대상코드를 실행하면 새로운 Iterator 객체가 생성되지만, 이 녀석이 바라보는 대상은 여전히 아까 삭제 작업이 끝난 그 list입니다. 따라서 이미 list 내부에서 "(알 수 없음)"이 제거되었기 때문에, 새로 만든 it로 리스트를 훑어도 삭제된 데이터는 보이지 않는 거죠.마지막으로, x = A 라는 수식은 A 라는 변수(상자) 안에 있는 값을 x 에 넣는 것은 맞습니다. 하지만 그 상자 안에 들어있는 내용물이 무엇이냐에 따라 결과가 달라져요. 기본 타입(Primitive Type)과 참조 타입(Reference Type)의 차이인데요.기본 타입인 int, double, boolean 과 같은 변수들은 상자 안에 실제 데이터 값을 직접 가지고 있으며 x = A 라고 하면 A 가 가진 실제 값이 x로 복사됩니다.반면에 ArrayList, Iterator 등 기본 타입을 제외한 나머지는 모두 참조 타입으로 이들은 상자 안의 데이터가 아니라 데이터가 저장된 메모리 주소를 가지고 있습니다. 그래서 x = A 라고 하면 A가 가진 메모리 주소가 x로 복사됩니다. 이제 x와 A 는 같은 메모리 주소(같은 객체)를 가리키게 되는거죠. 리모컨이 2개인데, 조종하는 TV 는 한 대인 상황과 같아요 😊학습에 도움되길 바라겠습니다.감사합니다.
- 0
- 1
- 28
질문&답변
사고력 키우는 법이 어떤게 있나요?
안녕하세요?모든 신발 사이즈를 size 배열에 집어넣고 반복문으로 돌리신 것도 정말 잘 해결하신 거에요! 😊개발에서 제일 중요한 것이 결국 '문제 해결 능력' 이거든요. 질문자분께서는 결국 스스로 이 문제를 해결하셨으니 그것으로도 충분히 훌륭하신 겁니다. 퀴즈에서는 5씩 증가한다는 조건이 있기 때문에 조금 응용을 해서 250 에 5 * i 만큼을 더한 것이지만, 상황에 따라 이러한 연산이 불가하고 그냥 배열에 값을 있는 그대로 집어 넣어서 사용해야 하는 경우도 있어요. 그러니 퀴즈를 잘 푸신 것입니다.학습을 하고, 또 복습을 하고, 나만의 방법으로 재해석해서 새롭게 문제를 풀어보고, 강의에서 퀴즈 해설로 보여드린 방법을 보면서 '저렇게도 풀 수 있구나' 를 이해했으면, 코드를 다 지우고 다시 한 번 처음부터 끝까지 퀴즈를 풀어보고, 그러면서 실력이 늘고 시야가 트이는 것이랍니다.자바 공부를 끝마치고 나서 스스로 프로젝트도 해보시고, 또 기회가 되면 알고리즘 공부를 해보세요. 문제 해결 능력이 훨씬 더 좋아지실 거예요! 정말 감탄이 나오는 코드들이 넘쳐난답니다 ㅎㅎㅎ남은 강의도 끝까지 응원하겠습니다 🙌감사합니다.
- 0
- 2
- 28
질문&답변
getter setter
안녕하세요?결론부터 말씀드리면, 코드가 실행되고 출력하는 데에는 어디에 넣든 영향이 없습니다. 하지만 강의에서는 아래 내용을 염두에 두고 코드를 작성했어요.setPrice : 잘못된 값이 들어오면 최소값인 10만원으로 강제 설정하여 어떤 경우에도 price 변수에 유효하지 않은 값이 저장되는 것을 막습니다. 마치 놀이 공원 입구에서 자유 이용권을 확인하고 나서 손님들을 들여보내게 되면 놀이 공원 안에는 항상 자유 이용권을 가진 사람만 있다는 것이 보장이 되지요.getResolution (model 이 아닌 resolution 맞죠? 😊) : 내부 데이터를 사용자에게 어떻게 보여줄지 결정하는 역할을 합니다. resolution 은 값이 입력되지 않을 수 있으며 시스템 내부적으로는 문제 없는 유효한 상태일 수 있어요. 하지만 사용자에게 null 이라고 한다거나 비어 있는 값을 그대로 보여주는 것은 썩 친절하지 못하죠. 따라서 이러한 데이터를 외부에 보여주기 전에 사용자 친화적인 형태(또는 대체값)로 가공을 하는 것입니다. 마치 식당에서 키오스크로 주문을 하려고 하는데 어떤 메뉴의 재료가 떨어져서 주문이 불가능한 경우 '준비중입니다' 라고 하는 문구를 보여주는 것과 같이 말이죠.정리하면, 예제에서 setter 는 데이터 무결성을 지키는 역할, getter 는 사용자 친화적인 출력 가공 역할을 하도록 작성하였습니다. 두 메소드에서 각각 처리한 이유는 데이터의 성격과 요구사항이 다르기 때문이며, 이는 반드시 지켜야 하는 규칙은 아니지만 역할에 따라 유연하게 코드를 작성하는 것이 좋은 습관입니다 🙌감사합니다.
- 0
- 2
- 66
질문&답변
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
안녕하세요?질문에 아래와 같이 답변 드립니다.// 1. 매개변수가 3개인 record 메소드 void record(boolean showDateTime, boolean showSpeed, int min) { ... } // 2. 매개변수가 없는 record 메소드 void record() { ... }먼저 위와 같이 2개의 메소드를 두고 각각 사용하도록 예제를 구성하였는데요. 이렇게 한 가장 큰 이유는 바로 편의성 때문입니다.만약 매개변수가 없는 record() 메소드가 없다고 가정해 봅시다. 사용자가 날짜와 속도를 항상 표시하고, 5분 단위로 녹화하는 가장 일반적인 기능을 쓰고 싶을 때도 매번 아래와 같이 코드를 작성해야 하겠지요.record(true, true, 5); // 항상 이렇게 모든 값을 넘겨줘야 함하지만 record() 메소드를 오버로딩으로 만들어두면, 사용자는 그냥 기본값으로 녹화하고 싶을 때 간단하게 record(); 라고만 호출하면 됩니다. 내부적으로는 record(true, true, 5);가 호출되니 결과는 같지만, 코드를 사용하는 입장에서는 훨씬 간결하고 편리해지는 것이죠.즉, 오버로딩을 통해 두 가지 선택지를 제공하는 것입니다.record(): "가장 일반적인 설정(기본값)으로 녹화해 줘."record(boolean, boolean, int): "내가 원하는 세부 설정을 줄 테니 그대로 녹화해 줘."이렇게 하면 하나의 메소드 정의로 모든 경우를 처리하려고 복잡한 로직을 만드는 것보다 훨씬 코드가 깔끔하고 직관적이 됩니다.이해가 되셨을까요? 여전히 궁금증이 남는다면 다시 답글 남겨주시면 다르게 설명드리겠습니다 😊아, 그리고 if문에 대한 추가로 설명해 드릴 부분이 있습니다.if(showDateTime) { System.out.println("영상에 날짜 정보 표시"); } if(showSpeed) //위의 if 가 true 일때는 밑의 if가 실행이 안 되기 때문에 { System.out.println("영상에 속도 정보 표시"); }라고 작성을 하셨는데요.주석에 "위의 if가 true일 때는 밑의 if가 실행이 안 되기 때문에"라고 적어주신 부분은 잘못된 설명입니다. 코드에 작성된 두 개의 if문은 서로 독립적이에요. showDateTime이 true인지 아닌지 확인하는 첫 번째 if문과, showSpeed가 true인지 아닌지 확인하는 두 번째 if문은 서로에게 아무런 영향을 주지 않습니다.showDateTime이 true이면 첫 번째 if문 안의 코드가 실행되구요. 이와는 상관없이 showSpeed가 true이면 두 번째 if문 안의 코드도 실행됩니다.만약 둘 중 하나만 실행되게 하려면 if-else if 구조를 사용해야 하지만 현재 코드에서는 날짜 표시 여부와 속도 표시 여부가 별개의 옵션이므로, 각각 if문을 사용하는 것이 맞습니다.함께 알아두시면 좋겠습니다 🙌감사합니다.
- 0
- 1
- 50
질문&답변
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
안녕하세요?문제가 발생하는 정확한 원인은 파악이 어렵지만 관련하여 찾아본 결과 다음과 같이 File > Invalidate Cache 를 선택해보신 뒤 다시 시도를 부탁드립니다.(사진)계속해서 오류가 발생한다면 메시지 전체를 복사 붙여넣기 하여 새로운 질문글을 남겨주시면 확인 후 도움 드리도록 하겠습니다 😊또는 번거롭지만 IntelliJ 자체를 삭제 / 재설치 하면 웬만한 환경적인 문제는 해결이 될 수 있으니 고려해보시는 것도 좋겠습니다.감사합니다.
- 0
- 2
- 44
질문&답변
변수 이름짓는법
안녕하세요?에러 메시지가 어떻게 표시가 되고 있나요?작성하신 5강의 소스 코드가 보여지는 채로 전체 화면을 캡처하셔서 올려주시면 확인 후 도움드리겠습니다 😊감사합니다.
- 0
- 2
- 83
질문&답변
intelli J 실행오류
안녕하세요?어디서부터 실행이 안되시는지 조금 더 자세히 알려주실 수 있으실까요? 인텔리제이를 더블 클릭했을 때 아무런 반응이 없는지, 또는 에러 메시지가 발생하는지요? 혹시 모르니 이전 버전의 프로그램을 설치해보시는 것도 대안이 될 수가 있답니다. 👉https://www.jetbrains.com/ko-kr/idea/download/other.html감사합니다 😊
- 0
- 2
- 71
질문&답변
혹시 이건 수학적 사고가 부족한 걸까요?
안녕하세요?프로그래밍을 공부하시는 분들이 자주 하시는 질문입니다 😊 열심히 고민을 해서 코드를 만들고 올바로 동작하는 것을 본 뒤에 퀴즈 정답을 봤더니 선생님은 허무하게 한 줄로 끝내더라 라는 것인데요. 결론부터 말씀드리면 아주 정석으로 올바른 길을 잘 걷고 계십니다.제가 수영을 배울 때 선생님께서는 자유형을 처음에는 팔을 쭉 뻗고 돌리라고 하셨어요. 그런데 옆 레인의 사람들은 모두 팔을 ㄱ자로 접었다가 펼쳤다가 하면서 멋있게 팔을 젓더라구요. 저도 바로 그렇게 할 수 있을 것 같았으나 그냥 시키는대로 하였고, 머지 않아 단계적으로 자세를 교정해주시면서 그분들처럼 보다 자유롭게 팔 동작을 하게 되었습니다. 시간이 지나고 보니 팔을 쭉 뻗고 돌리는 과정을 겪은 덕분에 오히려 호흡이 자연스럽고 힘이 많이 들어가지 않게 수영을 할 수 있었던 것 같아요.비록 지금은 geforce3080ti 님께서 가까운 길을 두고 먼 길로 돌아가는 것처럼 보이실 수 있지만, 충분히 스스로 고민을 해보시고 문제 해결을 한 다음 정답 코드를 보면서 나의 코드와 어떻게 다른지를 비교하고, 저렇게 하면 보다 간편하고 효율적으로 코드를 작성할 수 있겠구나 하는 것을 배우셨다면 그것으로 충분한 가치를 지닙니다. 오히려 단계적으로 잘 성장하고 있는 과정이며 코드가 다소 복잡하게 느껴지더라도 지금 레벨에서는 괜찮으니 신경쓰지 않으셔도 좋습니다 😍감사합니다.
- 0
- 2
- 123







