질문&답변
6분46초
확인 감사합니다! 메모해두고 추후에 영상 수정하면서 바꿔놓도록 하겠습니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 36
질문&답변
확인 감사합니다! 메모해두고 추후에 영상 수정하면서 바꿔놓도록 하겠습니다.
질문&답변
안녕하세요, 제가 방금 모의고사 파일을 전부 받아봤습니다. 압축파일로 정상적으로 다운로드가 됩니다. 혹시 확장자가 비어있는 경우 .zip으로 변경 부탁드립니다.
질문&답변
안녕하세요. 이 부분 많이 헷갈려하시는데, 질문을 보니 거의 다 이해하셨고 딱 한 군데만 잡으면 됩니다. 처음에 이해하신 "ptr_a에 'W'의 주소가 저장된다"는 맞습니다. 헷갈린 곳은 뒤에 쓰신 "*ptr_b의 값인 30000"입니다. 30000은 ptr_b 의 값이고, *ptr_b 의 값은 30000번지에 들어 있는 내용(1001)입니다. 이 차이 때문에 뒤쪽 이해가 꼬인 겁니다. 주소를 임의로 정해서 같이 따라가 보겠습니다. str : 주소 1001~1006, 저장된 값 "Hello\0" str2 : 주소 2001~2006, 저장된 값 "World\0" ptr_a : 주소 30000, 저장된 값 1001 ptr_b : 주소 40000, 저장된 값 30000 1. * 를 몇 개 붙였는지부터 보세요. ptr_b // 40000번지에 든 값 = 30000 (타입: char**) *ptr_b // 30000번지로 가서 본 값 = 1001 (타입: char*, 곧 ptr_a 자체) **ptr_b // 1001번지로 가서 본 값 = 'H' (타입: char, 곧 str[0]) * 를 하나 붙일 때마다 "저장된 주소로 한 번 찾아간다"고 기억하시면 됩니다. 그래서 *ptr_b 는 숫자 30000이 아니라, 30000번지에 있는 변수 ptr_a 자체를 뜻합니다. 시험에서는 *ptr_b 가 나오면 바로 ptr_a 로 바꿔 읽으시면 편합니다. 2. *ptr_b = str2; 는 ptr_a = str2; 와 같습니다. 대입문 왼쪽에 *ptr_b 가 있으면 "30000번지에 값을 써라"라는 뜻입니다. 오른쪽 str2 는 배열 이름이니까 첫 원소 주소인 2001이 됩니다. ptr_a : 주소 30000, 저장된 값 1001 → 2001 ptr_b : 주소 40000, 저장된 값 30000 (그대로) ptr_b 의 값 30000 자체를 바꾸려면 * 없이 ptr_b = ... 로 써야 합니다. * 를 붙였으니 ptr_b 본인이 아니라 ptr_b 가 가리키는 ptr_a 가 바뀐 겁니다. 그리고 하나 더 말씀드리면, 'H'가 'W'로 바뀐 것은 아닙니다. str 은 여전히 "Hello" 그대로이고, 바뀐 건 ptr_a 에 들어 있던 주소(1001 → 2001)입니다. ptr_a 가 다른 문자열을 가리키게 된 것뿐입니다. 3. 그래서 ptr_a[1] 은 'o' 입니다. ptr_a[1] 은 *(ptr_a + 1) 과 같습니다. 2001 + 1 = 2002번지 문자를 읽으니까 "World"의 두 번째 글자 'o' 가 출력됩니다. 4. ptr_b = str2; 와 **ptr_b = str2; 가 에러인 이유 둘 다 양쪽 타입이 안 맞아서 그렇습니다. str2 는 char* , 즉 문자의 주소입니다. ptr_b = str2; // char** 자리에 char* → 타입 불일치 *ptr_b = str2; // char* 자리에 char* → 일치, 정상 **ptr_b = str2; // char 자리에 char* → 타입 불일치 ptr_b = str2; 는 "포인터의 주소"를 담아야 하는 변수에 "문자의 주소"를 넣은 겁니다. 억지로 넣으면 ptr_b 가 'W'가 있는 곳을 포인터 변수로 착각하고 읽게 됩니다. **ptr_b = str2; 는 문자 한 칸('H' 자리, 1바이트)에 주소값을 넣으려는 겁니다. 문자 칸에 주소는 들어갈 수 없으니 에러가 납니다. 참고로 C에서는 컴파일러 버전에 따라 이 두 줄이 경고로만 뜨는 경우도 있고, 최근 GCC(14 이상)나 C++에서는 에러로 처리됩니다. 어느 쪽이든 잘못된 코드라고 보시면 됩니다. 실기에서는 이중 포인터 문제가 나오면 위처럼 주소표를 직접 그려놓고 * 하나에 한 칸씩 따라가시면 실수가 확 줄어듭니다. 또 막히는 부분 있으면 편하게 질문 남겨주세요.
질문&답변
안녕하세요! 섹션 11의 가장 첫 챕터에 들어가시면 다운로드 가능합니다.
질문&답변
안녕하세요, 별도로 "기출문제 해설강의"로 추가하기보다 서브넷 마스크만 따로 모아서 업데이트할 예정입니다. 출제 대비 알아야 할 부분이 많아서 이론은 텍스트 형태로 올릴 수도 있고, 해설 영상만 하나로 올릴 수도 있습니다. 현재 학습자료 구성 중이라서 10월 중에 올라가지 않을까 싶습니다. IP 대역과 서브넷 마스크를 잘 모르셔도 충분히 시험에 합격하실 수 있고, 주변에 수강생들 보면 열심히 서브넷 마스크 외워서 갔다가 하나도 안나오거나 계산 잘못해서 틀리는 경우도 많았습니다. 우선 다른 부분을 좀 더 암기하시고, 코드 이해에 집중하시는 것이 합격하는 데에 좀 더 큰 도움이 되실 것이라 생각합니다. 업데이트가 되면 새소식으로 업로드하겠습니다!
질문&답변
안녕하세요! 모의고사의 경우 별도의 해설 영상은 촬영 예정이 없으며, 질문을 올려주시면 답변을 드리는 형태로 설명드리고 있습니다. 우선 이 문제의 출력 결과는 GB1:B1 입니다. GiftBox 객체를 만들면 자식 클래스보다 부모 클래스인 Box 가 먼저 초기화됩니다. 그래서 Box 의 name 은 처음 "B" 로 초기화되고, 이어서 Box() 생성자의 name += "1" 이 실행되면서 "B1" 이 됩니다. 그다음에는 GiftBox 에 있는 name 이 "G" 로 초기화됩니다. 여기서 조금 헷갈릴 수 있는데요. GiftBox 의 name 이 부모 클래스의 name 을 덮어쓰는 것은 아닙니다. Box.name 과 GiftBox.name 은 각각 별개의 필드로 존재합니다. 따라서 이 시점에서는 부모의 name 은 "B1" , 자식의 name 은 "G" 인 상태라고 생각하시면 됩니다. 이후 GiftBox() 생성자 안의 name += super.get() 이 실행됩니다. 여기서 앞의 name 은 GiftBox 의 name 을 의미하고, super.get() 은 부모 클래스인 Box 의 get() 을 호출합니다. 부모의 get() 은 현재 "B1" 인 Box.name 을 반환하기 때문에 "G" + "B1" 이 되고, 결과적으로 GiftBox.name 은 "GB1" 이 됩니다. 마지막으로 g.get() 을 호출하면 GiftBox 에서 오버라이딩한 get() 메서드가 실행됩니다. 여기서 name 은 GiftBox.name 인 "GB1" 이고, super.get() 을 호출하면 부모의 Box.name 인 "B1" 을 가져옵니다. 따라서 최종적으로 "GB1" + ":" + "B1" 이 되어 GB1:B1 이 출력됩니다. 이 문제에서는 부모와 자식에 같은 이름의 필드가 있더라도 각각 별도로 존재한다는 점 , 그리고 super 를 사용하면 부모 클래스의 멤버에 접근할 수 있다는 점 을 기억해주시면 좋습니다. GiftBox 객체 ┌──────────────────────────┐ │ │ │ Box 영역 │ │ └─ name = "B1" │ │ │ │ GiftBox 영역 │ │ └─ name = "GB1" │ │ │ └──────────────────────────┘ g.get() │ ├─ name → GiftBox.name → "GB1" │ └─ super.get() → Box.name → "B1" │ ▼ "GB1:B1"
질문&답변
안녕하세요, 촬영은 끝났고 코드와 이론별로 영상 편집 중에 있습니다. 2회 합격자 발표 전에는 업로드 예정입니다. 참고로 26년 2회 실기 합격자 발표는 9월 11일 예정입니다.
질문&답변
안녕하세요, 26년 2회차 해설 영상을 업로드하면서 함께 통합본으로 올릴 예정입니다. 좀 더 핵심적인 내용만 제공해드리려고, 자주 출제되지 않는 부분을 줄이고 있습니다. 곧 업로드하도록 하겠습니다.
질문&답변
안녕하세요! 지금 버전의 이론 자료로 들으셔도 충분합니다! 시험 범위가 바뀐 것은 없으니 안심하세요.
질문&답변
for 문이 어떻게 흘러가는지 한 단계씩 풀어서 설명하겠습니다. int c = 0; for(i = 1; i > 3; i++) { c++; } printf("c=%d", c); 1단계 — 초기화 반복문에 들어가기 전에 c = 0 으로 시작합니다. 그리고 for 문이 처음 실행되면서 초기화 부분인 i = 1 이 딱 한 번 실행됩니다. 이제 i 는 1입니다. 2단계 — 조건 검사 초기화 다음에는 곧바로 조건을 검사합니다. 조건은 i > 3 이고, 지금 i 가 1이므로 1 > 3 인지를 따집니다. 1은 3보다 크지 않으므로 이 조건은 거짓(false) 입니다. 3단계 — 반복문 종료 for 문의 규칙상 조건이 거짓이면 본문으로 들어가지 않고 바로 반복문을 빠져나옵니다. 즉 중괄호 안의 c++ 는 단 한 번도 실행되지 않습니다. 증감식 i++ 도 실행되지 않습니다. 본문을 실행해야 그다음에 증감으로 넘어가는데, 애초에 본문에 진입하지 못했기 때문입니다. 4단계 — 출력 c 는 처음에 넣어둔 값 그대로 0입니다. 따라서 printf 는 화면에 c=0 을 출력합니다. 정리하면, 초기값 i = 1 이 조건 i > 3 을 처음부터 만족하지 못해서 반복문이 아예 돌지 않았고, 그래서 c 는 증가할 기회 없이 0으로 남은 것입니다. 정답: c=0