☕ 자바, 질문하며 배우기

학생이 LLM에게 먼저 묻고 → 코드로 확인하고 → 선생님이 정리합니다.
중·고등 · 구글 미트 · 파이썬보다 문법은 엄격, OOP에 더 충실한 언어

이 수업은 이렇게 진행돼요

🤖

STEP 1. 질문

교안 질문을 챗봇에 복사해 물어봅니다.

💻

STEP 2. 실행

이클립스·인텔리제이 또는 OnlineGDB에서 실행합니다.

👩‍🏫

STEP 3. 리뷰

화상 수업에서 핵심·오개념을 함께 정리합니다.

학습 설계
· 앞: 문법·제어·배열 (기초)
· 중간: 클래스·상속 (OOP 핵심)
· 뒤: 예외·컬렉션·스레드·람다·JVM (고급 리마인드)
⚠️ AI는 틀린 코드를 자신 있게 줄 수 있습니다. 반드시 컴파일·실행으로 확인하세요. 자바는 타입·세미콜론 오류가 흔합니다.

전체 커리큘럼

주제비고
1자바 소개 · 문법 · 제어 · 배열기초
2클래스 기초 (인스턴스·생성자·static)OOP 입문
3상속 · 접근제어 · 추상·인터페이스OOP 심화
4예외 · 컬렉션 · 스레드 · 람다 · JVM고급
5자기주도 프로젝트종합

1장. 자바 소개

파이썬보다 문법이 엄격합니다. public class · main · 세미콜론을 몸에 익히세요.

1-1. 자바?

🤖 AI에게 물어보자
자바가 어떤 언어인지, 파이썬·C와 비교해 특징을 설명해줘. Write Once Run Anywhere와 JVM이 무엇인지 초보자용으로 알려줘.

특징

  • 객체지향
  • 플랫폼 독립 (JVM)
  • 강한 타입 · 보안·성능

만들 수 있는 것

  • 백엔드 · 안드로이드
  • GUI · 기업 시스템
👩‍🏫 선생님 리뷰
  1. 소스(.java) → javac → 바이트코드(.class) → JVM이 실행
  2. 파이썬과 달리 타입을 명시하고, 문장 끝에 ; 가 필요합니다

1-2. 개발환경

🤖 AI에게 물어보자
JDK와 JRE 차이, 이클립스 또는 인텔리제이에서 Java 프로젝트 만들고 main 메서드 실행하는 방법을 단계별로 알려줘.
학습 권장: JDK 11 또는 17 LTS. 온라인만 쓰려면 OnlineGDB / OneCompiler Java 모드를 사용하세요.

1-3. 입력과 출력

🤖 AI에게 물어보자
자바에서 System.out.println 사용법과 Scanner로 콘솔 입력 받는 예제(이름·나이)를 보여줘. next()와 nextLine() 차이도 설명해줘.

출력 · main

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java");
    }
}

Scanner 입력

import java.util.Scanner;

public class InputEx {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름: ");
        String name = sc.nextLine();
        System.out.print("나이: ");
        int age = sc.nextInt();
        System.out.println(name + " / " + age);
        sc.close();
    }
}
👩‍🏫 선생님 리뷰
  1. 실행 진입점은 반드시 public static void main(String[] args)
  2. next()는 토큰(어절), nextLine()은 한 줄 전체
  3. Scanner 사용 후 close() 습관

1-4. 문자열 · 이스케이프 · printf

🤖 AI에게 물어보자
자바 이스케이프 문자(\n \t \\)와 String.format / System.out.printf 의 %s %d %f 사용 예제를 보여줘.
System.out.println("줄\n바꿈\t탭");
System.out.printf("나는 %d시 %s에 간다.%n", 9, "학교");
String s = String.format("원주율 ≈ %.2f", 3.141592);
System.out.println(s);
기초 지금은 printf/% 포맷. 문자열 연결은 + , 나중에는 StringBuilder도 등장합니다.

1-5. 주석 · 변수 · 상수

// 한 줄 주석
/* 여러 줄 주석 */
int score = 100;          // 변수
final int MAX = 100;      // 상수 (재할당 불가)
// MAX = 200; // 컴파일 오류

1-6. 자료형

🤖 AI에게 물어보자
자바 기본 타입(byte short int long float double char boolean)과 참조 타입 차이를 표로 정리해줘. int와 Integer 차이도 알려줘.
👩‍🏫 선생님 리뷰
  1. 기본 타입은 스택에 값, 참조 타입은 힙의 객체를 가리킵니다
  2. 컬렉션에는 기본 타입 대신 Integer 등 래퍼 사용

1-7. 연산자

int a = 10, b = 3;
System.out.println(a / b);   // 3 (정수 나눗셈)
System.out.println(a % b);   // 1
System.out.println(a == b);  // false
System.out.println(a > 5 && b < 5);

1-8. 반복과 조건

🤖 AI에게 물어보자
자바 if-else, switch, for, while, break/continue 예제를 각각 짧게 보여줘.
int score = 85;
if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");
} else {
    System.out.println("C");
}

for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    System.out.print(i + " ");
}

1-9. 실습 — 구구단

🤖 AI에게 물어보자
자바로 2~9단 구구단을 이중 for문으로 출력하는 코드를 짜줘. 단마다 줄바꿈해줘.
미션: AI 코드를 본 뒤, 5단만 출력하도록 직접 수정해 보세요.

1-10. 메서드와 변수 스코프

🤖 AI에게 물어보자
자바에서 메서드 정의·호출, 매개변수·반환타입, 지역변수 스코프를 예제로 설명해줘.
public class MethodEx {
    static int add(int x, int y) {
        return x + y;
    }
    public static void main(String[] args) {
        System.out.println(add(3, 5));
    }
}

1-11. 재귀함수 조금 어려움

🤖 AI에게 물어보자
자바 재귀로 팩토리얼과 피보나치를 구현해줘. 재귀의 종료 조건이 왜 필요한지 설명해줘.

1-12. 배열

int[] arr = {10, 20, 30};
System.out.println(arr[0]);
System.out.println(arr.length);
for (int n : arr) {
    System.out.println(n);
}
👩‍🏫 선생님 리뷰
  1. 배열 길이는 고정. 가변 길이는 나중에 ArrayList (4장)
  2. 인덱스 범위 밖이면 ArrayIndexOutOfBoundsException

1-13. 실습 — 최대·최소

🤖 AI에게 물어보자
int 배열에서 최댓값과 최솟값을 찾아 출력하는 자바 코드를 짜줘. for문만 사용하고 정렬 메서드는 쓰지 마.

2장. 클래스 기초

클래스 = 설계도, 인스턴스 = 객체. OOP의 출발점입니다.

2-1. 클래스와 인스턴스

🤖 AI에게 물어보자
자바 클래스와 인스턴스 차이를 비유로 설명해줘. name, age 필드와 introduce 메서드를 가진 Person 클래스 예제를 보여줘.
public class Person {
    String name;
    int age;
    void introduce() {
        System.out.println("나는 " + name + ", " + age + "살");
    }
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "철수";
        p1.age = 17;
        p1.introduce();
    }
}

2-2. 패키지와 classpath

🤖 AI에게 물어보자
자바 package와 import가 무엇인지, 왜 패키지를 쓰는지 초보자용으로 설명해줘.

2-3. 생성자

public class Person {
    String name;
    int age;
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
👩‍🏫 선생님 리뷰
  1. 생성자 이름은 클래스와 동일, 반환 타입 없음
  2. this는 이 객체 자신

2-4. static

🤖 AI에게 물어보자
자바 static 변수·메서드가 무엇인지, 인스턴스 멤버와 차이를 예제로 설명해줘. main이 static인 이유도 알려줘.

2-5. 자주 쓰는 기본 클래스

String, Math, Arrays 등. AI에게 “자바 String 주요 메서드 10개 예시”를 물어보세요.

String s = "Hello";
System.out.println(s.length());
System.out.println(s.toUpperCase());
System.out.println(Math.max(3, 7));

3장. 클래스 응용

3-1. 상속

🤖 AI에게 물어보자
자바 extends 상속 예제(Animal, Dog)와 super() 사용법을 보여줘.
class Animal {
    void speak() { System.out.println("..."); }
}
class Dog extends Animal {
    @Override
    void speak() { System.out.println("멍멍"); }
}

3-2. 접근 제어자

public · protected · (default) · private — AI에게 표로 정리해 달라고 하세요.

3-3. 오버로딩 · 오버라이딩

🤖 AI에게 물어보자
자바 메서드 오버로딩과 오버라이딩 차이를 예제 코드로 비교해줘.

3-4. 추상 클래스 · 인터페이스 고급

🤖 AI에게 물어보자
자바 abstract class와 interface 차이, 언제 무엇을 쓰는지 초보자용으로 설명해줘. 짧은 예제도 보여줘.

3-5. Call by Value

자바는 기본 타입이든 참조든 ‘값 복사’로 전달합니다. 참조 타입은 주소 값이 복사되어 객체 내용 변경은 공유될 수 있습니다. AI에게 그림으로 설명해 달라고 하세요.

4장. 고급 표현

앞 장 문법 위에 실무에서 자주 쓰는 도구들입니다.

4-1. 예외 처리

try {
    int n = Integer.parseInt("abc");
} catch (NumberFormatException e) {
    System.out.println("숫자 형식 오류");
} finally {
    System.out.println("항상 실행");
}

4-2. 제네릭 · 열거형 고급

🤖 AI에게 물어보자
자바 ArrayList<String> 처럼 제네릭을 쓰는 이유와 enum 간단한 예제를 알려줘.

4-3. 컬렉션 (List, Set, Map) 고급

import java.util.*;

List<String> list = new ArrayList<>();
list.add("A");
Set<Integer> set = new HashSet<>();
set.add(1);
Map<String, Integer> map = new HashMap<>();
map.put("age", 17);
배열(1장) → 가변 리스트·맵(여기서). “같은 기능, 더 실무적인 표현”입니다.

4-4. 파일 입출력

🤖 AI에게 물어보자
자바에서 텍스트 파일을 읽고 쓰는 예제(Files 또는 FileWriter/BufferedReader)를 try-with-resources로 보여줘.

4-5. 스레드 고급

🤖 AI에게 물어보자
자바 Thread 상속과 Runnable 구현으로 스레드 만드는 예제를 보여줘. 왜 동시성에서 동기화가 필요한지 한 문단으로 설명해줘.

4-6. 람다 · 스트림 고급

for문(1장)으로 하던 필터·변환을 짧게 쓰는 방법입니다.

import java.util.*;
import java.util.stream.*;

List<String> names = Arrays.asList("yuki", "raison", "koya", "cat");
long c = names.stream().filter(x -> x.contains("a")).count();
System.out.println(c);

4-7. 어노테이션

@Override, @Deprecated 등. 프레임워크(Spring)에서 매우 많이 씁니다. AI에게 자주 쓰는 어노테이션 5개를 물어보세요.

4-8. JVM 개념 고급

🤖 AI에게 물어보자
JVM이 무엇인지, .java가 실행되기까지의 과정(컴파일·클래스 로더·실행 엔진·힙/스택)을 초보자가 이해할 수 있게 단계로 설명해줘.
👩‍🏫 선생님 리뷰
  1. javac로 바이트코드 → JVM이 OS 위에서 실행
  2. Heap에 객체, Stack에 메서드 호출·지역변수
  3. GC가 쓰지 않는 객체를 회수

5장. 자기주도 프로젝트

1

질문 설계

목표·입출력·예외를 구체적으로

2

실행 검증

컴파일 오류를 직접 읽고 고치기

3

설명

선생님에게 내 말로 구조 설명

주제 예시

  • 캐릭터·몬스터 텍스트 게임 (클래스 + 파일에서 능력치 로드)
  • 간단한 회원 관리 (List/Map)
  • 구구단·성적 통계 콘솔 프로그램
마무리: AI가 틀린 부분 1가지를 골라 왜 틀렸는지 설명해 보세요.