[
  {
    "courseSlug": "java-basics",
    "question": "JavaScript에서는 let age = 17; 뒤에 age = \"열일곱\";처럼 다른 타입을 넣어도 허용되지만, Java에서 int age = 17; 뒤에 age = \"열일곱\";을 쓰면 어떻게 되는가?",
    "option1": "실행 중에 오류가 발생해 프로그램이 그때 멈춘다",
    "option2": "문자열이 자동으로 숫자로 변환되어 그대로 실행된다",
    "option3": "컴파일 단계에서 에러가 나서 실행조차 할 수 없다",
    "option4": "경고 메시지만 표시되고 정상적으로 실행된다",
    "answerIndex": 2,
    "explanation": "Java는 변수를 만들 때 타입을 미리 선언하고, 약속을 어기면 실행 전에(컴파일 때) 막는 언어다. 섹션 1 'JS와 뭐가 다를까'에서 배운 타입 선언과 컴파일 검사의 핵심이다."
  },
  {
    "courseSlug": "java-basics",
    "question": "코스의 붕어빵 비유에서 클래스, 객체, new 키워드를 올바르게 짝지은 것은?",
    "option1": "클래스=붕어빵, 객체=붕어빵 틀, new=틀을 새로 만드는 것",
    "option2": "클래스=붕어빵 틀, 객체=붕어빵, new=틀에 반죽을 부어 하나 굽는 것",
    "option3": "클래스=반죽, 객체=붕어빵 틀, new=틀에 팥을 채우는 것",
    "option4": "클래스=붕어빵 틀, 객체=반죽, new=다 구운 붕어빵을 꺼내는 것",
    "answerIndex": 1,
    "explanation": "섹션 3에서 클래스는 붕어빵 틀, 객체는 그 틀로 구운 붕어빵, new는 '틀에 반죽 부어서 하나 굽기'라고 배웠다. 틀은 하나여도 붕어빵(객체)은 원하는 만큼 만들 수 있다."
  },
  {
    "courseSlug": "java-basics",
    "question": "List<String> mentors에 멘토 3명이 들어 있을 때, 마지막(세 번째) 멘토를 꺼내는 올바른 코드는?",
    "option1": "mentors.get(2)",
    "option2": "mentors.get(3)",
    "option3": "mentors.get(-1)",
    "option4": "mentors.get(\"이선배\")",
    "answerIndex": 0,
    "explanation": "List의 첫 번째 칸은 get(0)부터 시작하므로, 3명이 든 리스트의 마지막은 get(3)이 아니라 get(2)다. 섹션 7에서 '몇 번을 배워도 헷갈리는 함정'으로 강조한 부분이다."
  },
  {
    "courseSlug": "java-basics",
    "question": "Java 클래스 안의 여러 메서드 중에서 어떤 것이 '생성자'인지 알아보는 기준은 무엇인가?",
    "option1": "이름이 main이고 앞에 static이 붙어 있다",
    "option2": "반환 타입이 void이고 이름이 new로 시작한다",
    "option3": "public이 붙어 있고 매개변수를 하나도 받지 않는다",
    "option4": "클래스와 이름이 똑같고 반환 타입이 없다",
    "answerIndex": 3,
    "explanation": "섹션 5에서 배운 대로, 클래스와 이름이 같고 반환 타입이 없는 특별한 메서드가 생성자다. 생성자는 '아이디 없는 회원' 같은 반쯤 만들어진 객체가 생기지 않게 막는 안전장치 역할을 한다."
  },
  {
    "courseSlug": "java-basics",
    "question": "동아리 회계 프로그램에서 잔액 필드를 프로젝트 아무 데서나 직접 고칠 수 있어서, 버그가 나도 누가 언제 바꿨는지 추적이 안 된다. 코스에서 배운 습관대로 고치는 방법은?",
    "option1": "잔액 필드를 public으로 열어 어디서든 값을 바로 확인하고 고치게 한다",
    "option2": "잔액 필드를 private으로 잠그고, 값을 바꾸는 public 메서드 하나만 열어 검증을 그 창구에 단다",
    "option3": "잔액을 바꾸는 코드를 전부 try-catch로 감싸 사고가 나도 멈추지 않게 한다",
    "option4": "잔액 필드를 String 타입으로 바꿔 숫자가 아닌 값이 들어오면 거부하게 한다",
    "answerIndex": 1,
    "explanation": "섹션 6의 캡슐화 습관 — 데이터는 금고(private)에 잠그고 창구(public 메서드) 하나로만 만지게 하면, 값이 바뀌는 통로가 한 곳뿐이라 검사와 추적을 거기에만 달면 된다."
  }
]
