🏆 인프런 2024년 루키상, 2025년 수강생Pick상 수상
👨💻 인프런 수강평 우수 강사 · macOS 10년 경력 개발자 출신
안녕하세요. @weekendcode 라는 유튜브 채널을 운영하고 있습니다.
비전공자, 프로그래밍에 관심 있는 학생들을 위해 최대한 쉽게 설명하고자 노력하는 강사입니다.
컴퓨터 공학으로 대학교를 졸업하고, 인간-컴퓨터 상호작용 연구분야로 석사 학위를 받았습니다.
Java 언어로 안드로이드 개발자로서 일했고, Python 강사로 활동했습니다.
몇 번의 이직과 창업을 하는 과정에서 비전공자 분들께 지식을 공유할 기회가 생긴 이후,
본격적으로 지식공유자로 활동하고 있습니다.
모르는 것은 적극적으로 질문 부탁드립니다.
최선을 다해서 답변 드리겠습니다.
좋은 하루 보내세요.
강의
수강평
- (2026 최신!) 일주일만에 합격하는 정보처리기사 실기
- (2026 최신!) 일주일만에 합격하는 정보처리기사 실기
- (2026 최신!) 일주일만에 합격하는 정보처리기사 실기
- 맥북 처음 샀을 때 꼭 해야 할 세팅 A to Z (Claude Code · OpenClaw · Hermes Agent | macOS 올인원)
게시글
질문&답변
부모의 생성자 출력 관련
안녕하세요. 질문 주신 코드는 생성자가 2번 불립니다.질문 의도가 맞으신지는 모르겠으나, 우선 답변드립니다.각 객체를 new로 만들 때마다 생성자가 따로 실행되므로, 순서대로 두 번 출력됩니다.Car(Tesla, 2021) ECar(75) Car(toyota, 2023) ECar(80)tesla를 만들 때 부모 생성자, 자식 생성자 순으로 실행되고, 그다음 toyota를 만들 때 같은 과정이 처음부터 다시 실행됩니다. 두 객체는 서로 영향을 주지 않습니다.주의하실 것은 질문 주신 10:23에는 super(model, year);를 주석 처리한 상태입니다.자바가 자동으로 super();를 넣어 기본 생성자 Car()를 호출하므로 출력은 이렇게 바뀝니다.Car() ECar(75) Car() ECar(80)이 경우 model과 year는 값이 들어가지 않아 각각 null, 0으로 남습니다.그래서 최종 출력값은Car() ECar(75) Car() ECar(80)입니다.전체 코드와 출력문을 보여드리겠습니다.(사진)
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 16
질문&답변
다차원 배열 포인터 질문있습니다
안녕하세요. 답변 전에 C언어의 원칙 두 가지를 먼저 말씀드리겠습니다.강의에서 다룬 내용이지만 헷갈리기 쉬운 부분이라 다시 정리합니다.첫째, C언어에는 문자열 자료형이 따로 없습니다. char를 메모리에 연달아 놓고 끝에 \0을 붙인 것을 문자열로 취급합니다. 그래서 %s는 값을 받지 않고 문자열이 시작되는 메모리 주소를 받습니다. 그 주소부터 한 글자씩 출력하다가 \0을 만나면 멈춥니다. 이 부분을 많이들 착각합니다.둘째, 배열 이름은 식에서 쓰이면 배열 첫 번째 원소의 주소로 바뀝니다. C언어 스펙이 그렇게 정해져 있습니다. (sizeof나 & 연산자와 함께 쓸 때만 예외입니다.)이 두 가지를 바탕으로 질문을 풀어보겠습니다.1번 질문중괄호 전체가 주소를 뜻하지는 않습니다. 중괄호는 배열의 각 칸에 넣을 초기값 목록입니다. 다른 배열 이름(k)을 쓴 것과도 다릅니다. C에서는 배열을 다른 배열 이름으로 초기화할 수 없습니다.주소에 해당하는 것은 중괄호 안의 각 문자열 리터럴입니다. "Hello"라고 쓰면 컴파일러가 메모리 어딘가에 H e l l o \0을 저장합니다. 이것도 일종의 char 배열이므로, 두 번째 원칙에 따라 식에서는 첫 글자 H의 주소로 바뀝니다. 결과적으로 4개의 주소가 4칸에 하나씩 들어갑니다.arr[0][0] = "Hello"의 시작 주소 arr[0][1] = "World"의 시작 주소 arr[1][0] = "app"의 시작 주소 arr[1][1] = "dev"의 시작 주소그러니 "C의 한계라서 포인터를 쓴다"고 외우실 필요는 없습니다."문자열 리터럴은 첫 글자의 주소다"만 기억하시면 됩니다.포인터 대신 char arr[2][2][6]처럼 글자를 직접 복사해 담는 방식도 가능하고, 이 코드는 둘 중 포인터 방식을 고른 것입니다.2번 질문선언된 것은 배열입니다. 정확한 타입은 "const char* 4개를 담는 2x2 배열"입니다.선언은 이름에서부터 읽으면 됩니다.const char *arr[2][2] arr → arr은 [2][2] → 2x2 배열이고 * → 각 칸은 포인터이며 const char → 그 포인터는 const char를 가리킨다 참고로 const char (*arr)[2]처럼 괄호로 묶어야 arr 자체가 포인터가 됩니다.printf에서 별을 붙이지 않는 이유는 첫 번째 원칙과 같습니다.%s는 주소를 받는 형식이고, arr[0][0]에 이미 주소가 들어 있습니다.printf("%s\n", arr[0][0]); // Hello (주소를 넘김) printf("%c\n", *arr[0][0]); // H (주소를 따라가 글자 하나를 꺼냄) printf("%c\n", arr[0][0][1]); // e별을 붙이면 문자열 전체가 아니라 첫 글자 하나(char)가 나오므로 %c로 출력해야 합니다.
- 좋아요수
- 0
- 댓글수
- 3
- 조회수
- 33
질문&답변
모의고사 5회
확인해서 다시 업로드 하겠습니다.
- 좋아요수
- 0
- 댓글수
- 1
- 조회수
- 32
질문&답변
모의고사 자료 해설이 너무 불친절하네요.
안녕하세요, 안 그래도 모의고사에 대한 의견이 많아서 전체적으로 수정하고 있습니다.어렵게 만들려고 하다보니 Java API에서 나올 수 있는 부분을 넣다보니 수강생분들이 느끼기에 난도가 많이 올라간듯 합니다.우선 오늘 이론 학습자료 v2.0을 먼저 업데이트 했습니다.바로 모의고사 작업을 진행하고 있으며, 해설을 보고도 이해하실 수 있도록 수정하겠습니다.시기가 시기인지라, 빨리 업데이트해서 모의고사를 개선하겠습니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 39
질문&답변
배열 포인터 출력 표시
단순하게 생각하시는 것이 좋습니다.C언어에서는 배열의 이름도 메모리 주소로, 포인터 변수 자체도 메모리 주소입니다. 둘 다 변수명만 다르지 실제로 안을 까보면 메모리 주소를 담고 있다는 것이죠.그래서 값으로 표현하려면 앞에 별표를(*) 붙여서 역참조라는 과정으로 환산해야하지만,인덱스 [숫자]가 붙는 경우에는 해당 값을 직접 가리킨다고 생각하시면 됩니다.이건 사실 암기의 영역입니다. 포인터 이름에 별표를 붙이면 값으로 바뀌고, 인덱스로 접근하면 값으로 된다로 외우시는 것이 빠릅니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 53
질문&답변
포인터 증감 또는 값 증감
안녕하세요, 답변드립니다.값을 1 증가시키려면 *로 먼저 값에 접근한 다음 증가시켜야 합니다. 이때 괄호가 꼭 필요합니다.강의에서 말씀드린 것처럼 메모리 주소에서는 *을 통해서 값으로 환산시켜야지만 값으로 계산할 수 있습니다.(*ptr_a)++; // 또는 ++(*ptr_a);, ++*ptr_a;ptr_a가 'H'를 가리키고 있을 때 (*ptr_a)++를 하면 'H'의 아스키코드 72가 73이 되어 'I'로 바뀝니다.이후 printf("%s\n", a);를 출력하면 "Iello"가 나옵니다.시험에서 나올 수 있을만한 함정은 괄호 없이 쓴 *ptr_a++입니다. 후위 ++가 *보다 우선순위가 높아서 *(ptr_a++)로 해석됩니다. 즉 현재 값('H')을 꺼내 쓰고, 그다음 포인터가 이동합니다. 값은 바뀌지 않습니다.정리하면 다음과 같습니다.(사진)
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 53
질문&답변
모의고사 1회 4번 문제와 관련한 질문이 있습니다.
안녕하세요, printf()에서 주어지는 인자가 여러 개인 경우에는 보통은 왼쪽에서부터 적으시면 됩니다.지금까지 나온 문제 중에서 인자 출력 순서가 이상하게 나온 C언어 문제는 없었으며,설령 그렇다고 하더라도 컴파일러마다 다른 값이 나오는 경우 해당 문제는 무조건 전원 정답 처리를 시킵니다.걱정하지 않으셔도 되고, 오히려 C언어에서 걱정하셔야 할 것은 논리적인 구조나 알고리즘과 같은 여러 복잡한 반복문과 조건문을 고민하셔야 합니다.문제가 출력문의 순서까지 꼬아서 낼 정도로 그렇게까지 지저분하게 나오지는 않습니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 39
질문&답변
배열 포인터 함수 관련
안녕하세요.printf("%d\n", arr);는 배열의 값이 아니라 배열의 시작 주소를 출력하게 됩니다. 배열 이름 arr은 식에서 첫 번째 요소의 주소(&arr[0])로 생각하시면 됩니다. 그래서 *arr은 그 주소에 있는 값인 1이 나오고, arr은 주소 자체가 나옵니다.다만 주소는 실행할 때마다, 환경마다 달라지기 때문에 정해진 값이 나오지 않습니다. 또 주소를 %d로 출력하는 것은 원칙적으로 올바른 방법이 아니어서, 64비트 환경에서는 숫자가 잘리거나 음수처럼 이상하게 보일 수도 있습니다.메모리 주소는 컴퓨터마다 다르게 나온다는 것을 수업에서 언급했으니 아실 겁니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 52
질문&답변
실기 이론 통합 요약본 버전
안녕하세요, 중요한 내용만 보시려면 그렇게 해도 됩니다.디자인이 개선된 버전으로 보시면 됩니다.전체를 다 보시려면 v0.91을 보고 외우시는 것을 추천드립니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 66
질문&답변
업캐스팅 3번 문제 예시
안녕하세요, Constructor of A가 한 줄 없어진 것 말씀이실까요?2번과 3번에서 가장 큰 차이는 자식에서 draw가 없어진 것도 있습니다만메인함수 첫 줄을 주석으로 처리해서 가장 먼저 뜨는 한 줄이 아예 사라진 것입니다.뒷 부분 해설을 이해하셨다면, 그것 차이 밖에 없습니다.앞에서 있던 한 줄을 뒤에서 지워서 없어진 것입니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 63





