안녕하세요. @weekendcode 라는 유튜브 채널을 운영하고 있습니다.
비전공자, 프로그래밍에 관심 있는 학생들을 위해 최대한 쉽게 설명하고자 노력하는 강사입니다.
컴퓨터 공학으로 대학교를 졸업하고, 인간-컴퓨터 상호작용 관련 석사 학위를 받았습니다.
Java 언어로 안드로이드 개발자로서 일했고, Python 강사로 활동했습니다.
몇 번의 이직과 창업을 하는 과정에서 비전공자 분들께 지식을 공유할 기회가 생긴 이후,
본격적으로 지식공유자로 활동하고 있습니다.
모르는 것은 적극적으로 질문 부탁드립니다.
최선을 다해서 답변 드리겠습니다.
좋은 하루 보내세요.
강의
수강평
- (2025) 일주일만에 합격하는 정보처리기사 실기
- (2025) 일주일만에 합격하는 정보처리기사 실기
- (2025) 일주일만에 합격하는 정보처리기사 실기
게시글
질문&답변
포인터 작성요령
이유는 간단합니다. a[0][0] 자체가 이미 주소값이기 때문에 그렇습니다.3가지 방식으로 추정하거나 설명드릴 수 있겠습니다. 첫 번째, 문자열해당 요소는 "Hello" 입니다. 정확히 말하자면 H를 가리키고 있는 메모리 주소입니다.C언어에서 문자열을 가리킬 수 있는 방법은 값으로는 없습니다.C언어는 애초에 문자열이라는 데이터 단위를 다룰 수 없기 때문이죠.그저 문자 한 개씩 나열된 메모리 집합체입니다. 여기서 이미 주소라는 것을 추정할 수 있습니다. 두 번째, 배열의 단위가 char* 가장 정확한 대답이 될 수 있겠는데요. 보시면 배열의 요소 단위가 애초에 char* 형태입니다.모든 배열의 요소는 문자 포인터가 됩니다. 그렇기 때문에, arr[0][0]은 어딘가 ['H']['e']['l']['l']['o']['\0'] 로 저장되어 있는 첫 시작 주소를 가리킵니다. 저게 주소이기 때문에, %s로 시작할 수 있습니다. 세 번째, %s는 값이 아니라 시작 주소를 받는 포맷팅 주소가 아니었다면 %s는 동작하지 않습니다. 굉장히 중요합니다. %s는 값이 아니라 주소를 줘야 합니다.%s의 정의 자체가 문자가 시작하는 주소를 받아서 계속 다음 메모리값을 읽어서 출력하며 '\0'를 만나면 출력을 멈추는 역할을 합니다. 질문에 답이 되셨을지 모르겠습니다.
- 0
- 2
- 11
질문&답변
Java: 상속을 정리하는 문제 10개에서 유형 9번
안녕하세요, 우선 생성자가 둘 다 없으니까 신경 쓸 필요가 없으니 말씀하신 것이 맞고,그대로 자식에서 오버라이딩(재정의) 했기 때문에 자식 것을 실행합니다. 자식 것에서 명시적으로 부모를 호출하고 있어서 부모의 메서드를 호출하고, 그 다음에 나머지 Child display를 출력합니다. 전체적으로 다 옳게 말씀하셨으나, 제 해설과 동일하게 이해하셨는지 확인 부탁드립니다.
- 0
- 2
- 17
질문&답변
수업 자료
안녕하세요!글로만 되어 있는 강의는 지나가면서 한번 읽어보시기를 권장드리는 챕터입니다. 자주 출제가 되지는 않지만, 간단하게 메모만 남겨두시고 시험보러 들어가기 전에 한 번씩 훑어보시면 됩니다. 별도의 수업자료는 없습니다.
- 0
- 2
- 32
질문&답변
C언어 문자열 인식
꼭 그렇지는 않습니다. null 문자를 추가하지 않아도 정상적으로 정의는 되는데요.문자열 관련 기능을 하면 오류가 발생하거나 이상한 값이 발생할 수 있습니다.그래서 웬만하면 안전하게 '\0' 처리를 꼭 합니다. 그리고 "Hello"와 같이 큰 따옴표를 통한 문자열 생성의 경우 항상 \0가 자동으로 삽입되어 있습니다. 외우실 때는"작성할 때는 무조건 가장 마지막에 \0을 넣는 것으로 하지만, 시험 문제에 \0이 없더라도 코드에 오류가 발생하지는 않는다."로 생각하시면 됩니다.
- 0
- 2
- 20
질문&답변
정처기2025 2회 3분2초
안녕하세요,설명드리기 좋게 간단하게 메서드를 void change([] data, s) {} 이렇게 표시하겠습니다.data[0] = s; s = "Z""엎어쳐진다"는 이야기는 저 코드의 첫 줄을 설명한 것입니다. 저 함수 안에서는 data라는 단어는 {"A"} -> A라는 문자열 1개가 들어가 있는 배열을 뜻합니다.s는 "B"라는 문자열이고요. data[0]은 "A"입니다. 배열의 첫번째 요소를 0번 인덱스로 접근했기 때문입니다. 배열의 값이죠.거기에 s를 대입했습니다. "data 배열이라는 곳 첫번째 요소에 변수 s에 담고 있는 값을 할당하라" 라고 했기 때문에배열의 첫번째 요소인 A가 B로 할당됩니다.그래서 {"B"}가 됩니다. 그 뜻이었습니다.
- 0
- 2
- 23
질문&답변
2:22 지점에서 포인터 조작과 출제 패턴 (2. 포인터 증가/감소, 이중 포인터)
포인터로는 모두 다 ++로 하면 됩니다. 그러면 알아서 다음 메모리 주소를 가리킵니다.개발자가 직접 바이트 수를 세서 다음 메모리로 점프하는 게 아니라서 몇 바이트인지는 모르셔도 됩니다.
- 0
- 2
- 19
질문&답변
강의 내 문제 자료 다운로드 가능 여부
안녕하세요, 어제 답변 드린 것처럼 오늘 업로드 예정입니다. C언어: 함수(메서드)선언과 호출, 연산자와 기출문제, switch-caseJava: 추상클래스, 인터페이스 이 외의 챕터가 있다면 말씀 부탁드립니다!
- 0
- 2
- 26
질문&답변
첨부자료 없는 강의에 대한 문제 자료
안녕하세요~글로 작성된 수업을 제외하고는 모두 내일까지 업로드 예정입니다.현재 파악한 것으로는 4개 챕터가 수업자료가 비어있습니다.자료를 업로드 한 것으로 알고 있었는데, 누락되어 있어 업로드 예정입니다. C언어: 함수(메서드)선언과 호출, 연산자와 기출문제, switch-caseJava: 추상클래스, 인터페이스 [드물게 출제되는 문법] 섹션의 학습자료는 고민 중입니다.사실 원래 섹션 자체를 구성하지 않으려고 했던 부분인데 여러 요청으로 영상을 업로드했으나빈출이 되지 않으면서 괜히 학습량만 올리는 것 같다는 생각이 들어서요. 일단 영상이 있으니 학습자료를 준비해보겠습니다. 드물게 출제되는 문법 부분보다는 다른 챕터에 더 익숙해지는 것을 권장드립니다.
- 0
- 2
- 24
질문&답변
섹션2 10, 11, 12강 강의자료
안녕하세요! 피드백 감사합니다. 저번에 수업자료를 분명히 제작해서 추가 했던 것으로 기억하고 있었는데,지금 보니까 누락되어 있네요. 자료를 찾아서 내일(15일)까지 바로 등록해두겠습니다!
- 0
- 2
- 23
질문&답변
4분 14초 람다식 이해가 잘 안갑니다!
안녕하세요, 일단 현재 코드에서는 app을 구현한 것과 마찬가지입니다.F f = (x) -> { if (x > 2) { throw new Exception(); } else { return x * 2; } };이 코드가 바로 app 메서드를 구현한 것입니다. 인터페이스로 정의한 F는 함수형 인터페이스로, 아래에서 그것을 받아서 직접 구현하게 됩니다.여기서는 람다라는 이름이 없는 익명 함수로 만든 것입니다.run(n->n+9)도 마찬가지고 F tempF = new F() { @Override public int app(int n) throws Exception { return n + 9; } }; run(tempF);이런 식으로 작성되었다고 이해하시면 됩니다. 어떻게 동작되는지 전체적으로 흐름을 한 번 살펴보겠습니다.f.app(3)에서 3이 어떻게 f 함수의 매개변수 x로 전달되나요?"이것에 대해서 설명해보겠습니다. 코드 설명run(f) 호출 F f = (x) -> { if (x > 2) throw new Exception(); else return x * 2; }; run(f);run 메서드 안에서 f.app(3) 호출 public static int run(F f) { return f.app(3); // 여기서 3을 전달! }람다 실행: x = 3이 됨 (x) -> { // x에 3이 들어옴 if (x > 2) { // 3 > 2 → true throw new Exception(); // 예외 발생! } } 정리:f.app(3)를 호출하면 → 람다의 매개변수 x에 3이 전달됩니다이것은 메서드 호출의 기본 원리와 동일합니다람다 (x) -> ...의 x는 app(int n)의 n과 대응됩니다 그래서 요약하자면run(f)f.app(3) 실행x = 3, 3 > 2 → Exception 발생위에서 오류가 발생했기 때문에 예외처리에 의해서 catch로 이동 → 7 반환run(n -> n + 9)(n -> n + 9).app(3) 실행n = 3, 3 + 9 → 12 반환최종 출력값은 해설 영상에서 설명드렸듯이 7 + 12 = 19가 됩니다.
- 0
- 2
- 36