🏆 인프런 2024년 루키상, 2025년 수강생Pick상 수상
👨💻 인프런 수강평 우수 강사 · macOS 10년 경력 개발자 출신
안녕하세요. @weekendcode 라는 유튜브 채널을 운영하고 있습니다.
비전공자, 프로그래밍에 관심 있는 학생들을 위해 최대한 쉽게 설명하고자 노력하는 강사입니다.
컴퓨터 공학으로 대학교를 졸업하고, 인간-컴퓨터 상호작용 연구분야로 석사 학위를 받았습니다.
Java 언어로 안드로이드 개발자로서 일했고, Python 강사로 활동했습니다.
몇 번의 이직과 창업을 하는 과정에서 비전공자 분들께 지식을 공유할 기회가 생긴 이후,
본격적으로 지식공유자로 활동하고 있습니다.
모르는 것은 적극적으로 질문 부탁드립니다.
최선을 다해서 답변 드리겠습니다.
좋은 하루 보내세요.
Courses
Reviews
happyhappythursd1933
·
A to Z Settings You Must Do When You First Buy a MacBook (Claude Code · OpenClaw · Hermes Agent | macOS All-in-One)A to Z Settings You Must Do When You First Buy a MacBook (Claude Code · OpenClaw · Hermes Agent | macOS All-in-One)- (2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week
- (2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week
- (2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week
- (2026 Latest!) Pass the Information Processing Engineer Practical Exam in One Week
Posts
Q&A
부모 및 자식 생성자 출력 관련
안녕하세요!질문하신 코드 7번 예제는 문법적으로 틀린 거라서 애초에 실행이 안됩니다.Java는 프로그래밍 코드를 실행하기 전에 컴파일이라는 문법에 맞게 작성되어 있는지 코드를 평가하는 과정이 있습니다. super라는 키워드가 생성자에서 첫 줄에 없으면 그 과정에서 다음으로 넘어가지를 못합니다. 그래서 애초에 아예 실행 자체가 안됩니다.이건 언어의 스펙이라서 그냥 받아들이셔야 합니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 14
Q&A
17강 28:26
네 맞습니다.메모리 주소에 접근하고, 그 값을 *로 꺼내와서 서로 교환하는 것입니다.a를 임시에 넣고, b를 a의 주소에 해당하는 값에 넣고, 다시 임시에서 b로 넣는 것입니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 13
Q&A
75강 26년 1회 코드 문제 해석 강의 질문 드립니다.
앗! 0, 1, 2가 맞습니다.저렇게 설명하고는 뒤에는 막상 2까지만 넣어서 해설했네요.(b[3] += b[2]까지만 하는 것이죠)말씀하신 대로 range(3)은 0, 1, 2까지 나옵니다. 해당 숫자 미만으로 출력합니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 6
Q&A
C언어 기출문제 변형에서 6번 문제입니다. 20:56
안녕하세요! 핵심은 *과 ++의 우선순위 및 결합 방향입니다.++*ptr은 ++(*ptr)로 해석됩니다.*가 먼저 ptr에 붙어서 "ptr이 가리키는 값(arr[0])" 자체를 가리키게 되고, 전위 ++가 그 값을 1 증가시킵니다. 즉 포인터는 그대로 arr[0]을 가리키고 있고, 배열 원소의 값만 20에서 21로 바뀌는 것입니다. 그래서 결과는 21이고, arr[1]과는 전혀 관계가 없습니다.*ptr++는 *(ptr++)로 해석됩니다. 후위 ++는 *보다 우선순위가 높기 때문에 ++가 *ptr이 아니라 ptr 자체에 먼저 붙습니다. ptr++는 포인터를 다음 칸으로 이동시키되, 후위 연산이므로 식의 결과값으로는 이동 전의 원래 주소가 가리키던 값을 돌려줍니다. 그 다음 *가 그 값을 읽습니다. 즉 값은 그대로 두고 포인터의 위치만 다음 원소로 옮기는 것입니다.질문자께서 생각하신 arr[0]++는 사실 (*ptr)++라고 괄호를 쳤을 때의 이야기입니다.*ptr++에서는 ++가 ptr에 붙는 것이지 *ptr(배열 값)에 붙는 게 아니라서 의미가 다릅니다.정리하면 이렇게 기억하시면 됩니다.++가 *보다 왼쪽에 있으면(++*ptr) → 값을 증가시킵니다. 포인터는 안 움직입니다.++가 ptr 바로 오른쪽에 있으면(*ptr++) → 포인터를 증가시킵니다. 값은 그대로이고 위치만 이동합니다.
- Likes
- 0
- Comments
- 3
- Viewcount
- 11
Q&A
17강 22:38
안녕하세요.%s는 무조건 주소를 받아서 가장 마지막 \0 (널문자)를 만나기 전까지 출력합니다.당연히, 배열의 이름은 주소로 사용된다는 것은 아셔야 합니다.1글자만 출력하고 싶다면 %c로 출력하셔야 합니다.printf("첫 글자: %c\n", *str);정리하자면,str + %s → 문자열 전체 출력 (지금 코드가 이 경우) ✅*str + %c → 첫 글자 t만 출력 ✅*str + %s → 첫 글자만 나오는 게 아니라 오류/예측불가 동작 ⚠️
- Likes
- 0
- Comments
- 2
- Viewcount
- 20
Q&A
16강 2:17
안녕하세요, 그건 C언어의 스펙입니다. 어쩔 수 없이 외우셔야 하는 부분입니다.C언어에서는 배열의 이름 그 자체를 주소로 사용할 수 있습니다. 그럴 경우, 첫 요소의 메모리 주소를 가리킵니다.int a[5];처럼 배열을 선언하면, 이 a라는 이름은 일반 변수처럼 값을 담고 있는 게 아니라 배열이 시작하는 메모리 주소 그 자체를 의미합니다.즉 a를 그냥 쓰면 자동으로 &a[0] (배열의 첫 번째 요소의 주소)와 똑같은 뜻이 됩니다. 이건 C언어의 규칙입니다. "배열 이름은 배열의 첫 주소로 자동 변환된다"는 규칙이 있거든요.그럼 왜 ptr_a = a라고 쓰나요?포인터 변수를 선언할 때는 "이 포인터가 어떤 메모리 주소를 가리킬 것인가"를 알려줘야 해요. char *ptr_a = a;는 "ptr_a라는 포인터야, 너는 배열 a의 첫 번째 칸을 가리켜라"라는 뜻입니다.여기서 a는 그냥 "배열 a가 시작하는 주소값"이라서, 이걸 포인터에 대입하면 ptr_a도 그 주소를 가리키게 되는 것뿐이에요. a라는 글자 자체가 저장되는 게 아닙니다.왜 출력하면 "a"가 아니라 배열의 값이 나오나요?값을 가져올 때 사용하는 것이 바로 *입니다. *ptr_a의 * 기호예요.ptr_a (별표 없이) → 주소값 (숫자, 예: 0x7ffee...)*ptr_a (별표 붙여서) → 그 주소에 저장된 실제 값을 꺼내오라는 뜻 (역참조, dereference)printf("%c\n", *ptr_a);에서 *ptr_a는 "ptr_a가 가리키는 주소로 가서, 거기 저장된 값을 꺼내와라"라는 의미예요. 그 주소에 저장된 값이 배열의 첫 번째 요소값('H')이니까 'H'가 출력되는 거고요.
- Likes
- 0
- Comments
- 2
- Viewcount
- 21
Q&A
9강 35분경 질문있습니다
네 맞습니다. total 자체는 반복문에 있는 것이 아니라 가장 마지막에 sumQ + sumR로 한 번에 구해집니다.정확합니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 25
Q&A
11강 3:20
/는 printf에서 그냥 평범한 문자라서 한 번만 써도 그대로 출력됩니다. %만 특별 취급을 받는 이유가 있습니다.printf는 문자열 안에서 %를 보는 순간 "아, 다음에 서식 지정자가 오겠구나" 하고 해석을 시작합니다. %d, %s, %c처럼 말입니다. 그래서 % 하나만 딱 쓰면 컴파일러가 "이건 서식 지정자 시작이네" 하고 기다리다가 뒤에 나오는 문자와 조합해버립니다.그래서 "진짜 % 글자 자체를 출력하고 싶다"는 뜻을 전달하려면 %%라고 두 번 써서 "이건 서식 지정자가 아니라 진짜 % 글자야"라고 알려줍니다./는 printf 입장에서 아무 의미 없는 그냥 평범한 글자라서 특별 취급할 필요가 없습니다. a, b, /, + 같은 일반 문자들은 다 한 번만 쓰면 됩니다.다른 특수문자도 있을까요?네, 있습니다. 다만 성격이 조금 다릅니다.%% → printf 서식 지정자를 이스케이프하기 위한 것 (printf 전용)\ (백슬래시) → 이건 printf가 아니라 C 문자열 자체의 이스케이프 문자입니다. 이미 \n(줄바꿈), \t(탭)처럼 써봤을 텐데, 이 \도 특별한 의미를 가진 문자라서 다음과 같은 규칙이 있습니다:진짜 \ 글자 하나를 출력하고 싶으면 \\처럼 두 번 써야 합니다문자열 안에 큰따옴표(")를 넣고 싶으면 \"처럼 써야 합니다 (그냥 "를 쓰면 문자열이 거기서 끝난 걸로 인식되기 때문입니다)
- Likes
- 0
- Comments
- 2
- Viewcount
- 29
Q&A
부모 및 자식 생성자 출력
부모 기본생성자를 부르는 super()가 생략되어 있는 것입니다.부모 생성자를 부르는 것이 명시적으로 없으면, 묵시적으로 super() 을 Java가 넣어줍니다.자식 필드가 초기화되기 전에는 무조건 부모 필드가 초기화 되어야하기 때문입니다.없으면 알아서 부모의 기본 생성자를 부르고, 명시적으로 있으면 해당 부모 생성자를 부른다고 생각하시면 됩니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 17
Q&A
9강 23:46
안녕하세요, 만약 1, 2, 3, 4, 5, 6, 7 이렇게 count가 증가할 때마다 한 줄씩 찍고 싶으시면, printf를 if문 안, count++ 바로 다음으로 옮기시면 됩니다.#include int main() { int i, j, count = 0; for (i = 1; i 이렇게 하면 조건(i * j % 3 == 0)을 만족할 때마다 그 순간의 count 값을 바로 출력하니까, 원하시던 대로1 2 3 4 5 6 7가 출력됩니다. 핵심은 "printf가 반복문 안에 있는지, 밖에 있는지"예요. 반복문 밖에 있으면 최종 결과 딱 한 번만, 반복문 안(조건 만족 시점)에 있으면 그때그때 값이 출력됩니다.
- Likes
- 0
- Comments
- 2
- Viewcount
- 32





