☕ 자바, 질문하며 배우기
학생이 LLM에게 먼저 묻고 → 코드로 확인하고 → 선생님이 정리합니다.
중·고등 · 구글 미트 · 파이썬보다 문법은 엄격, OOP에 더 충실한 언어
이 수업은 이렇게 진행돼요
🤖
STEP 1. 질문
교안 질문을 챗봇에 복사해 물어봅니다.
👩🏫
STEP 3. 리뷰
화상 수업에서 핵심·오개념을 함께 정리합니다.
학습 설계
· 앞: 문법·제어·배열 (기초)
· 중간: 클래스·상속 (OOP 핵심)
· 뒤: 예외·컬렉션·스레드·람다·JVM (고급 리마인드)
· 앞: 문법·제어·배열 (기초)
· 중간: 클래스·상속 (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 · 기업 시스템
👩🏫 선생님 리뷰
- 소스(.java) → javac → 바이트코드(.class) → JVM이 실행
- 파이썬과 달리 타입을 명시하고, 문장 끝에 ; 가 필요합니다
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();
}
}
👩🏫 선생님 리뷰
- 실행 진입점은 반드시
public static void main(String[] args) - next()는 토큰(어절), nextLine()은 한 줄 전체
- 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 차이도 알려줘.
👩🏫 선생님 리뷰
- 기본 타입은 스택에 값, 참조 타입은 힙의 객체를 가리킵니다
- 컬렉션에는 기본 타입 대신 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);
}
👩🏫 선생님 리뷰
- 배열 길이는 고정. 가변 길이는 나중에 ArrayList (4장)
- 인덱스 범위 밖이면 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;
}
}
👩🏫 선생님 리뷰
- 생성자 이름은 클래스와 동일, 반환 타입 없음
- 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가 실행되기까지의 과정(컴파일·클래스 로더·실행 엔진·힙/스택)을 초보자가 이해할 수 있게 단계로 설명해줘.
👩🏫 선생님 리뷰
- javac로 바이트코드 → JVM이 OS 위에서 실행
- Heap에 객체, Stack에 메서드 호출·지역변수
- GC가 쓰지 않는 객체를 회수
5장. 자기주도 프로젝트
1
질문 설계
목표·입출력·예외를 구체적으로
2
실행 검증
컴파일 오류를 직접 읽고 고치기
3
설명
선생님에게 내 말로 구조 설명
주제 예시
- 캐릭터·몬스터 텍스트 게임 (클래스 + 파일에서 능력치 로드)
- 간단한 회원 관리 (List/Map)
- 구구단·성적 통계 콘솔 프로그램
마무리: AI가 틀린 부분 1가지를 골라 왜 틀렸는지 설명해 보세요.