아래 퀴즈를 통해 다음과 같은 개념을 익힐 수 있어요.
1-4 | 변수, 자료형 | int, double, char 등 기본형 타입 |
1-5 | 입출력(IO) | Scanner, System.out.println, nextLine() 등 |
1-6 | 연산자 | 사칙연산 (+, -, *, /, %), 형변환 |
1-7 | 조건문 | if, else if, else, 조건 분기 처리 |
1-8 | 반복문 | for, while, 카운터 반복 vs 조건 반복 |
2-3 | 래퍼 클래스 | Integer, Double, Character, autoboxing/unboxing |
2-5 | 상수(final) | final 키워드, 상수 선언, 변경 불가성 |
2-6 | 인터페이스 | interface, implements, 다형적 호출 |
2-7 | 캡슐화 | private 필드, getter/setter, 정보은닉 |
2-8 | 상속 | extends, protected, super(), 부모-자식 관계 |
2-10 | 다형성 | 메서드 오버라이딩, 부모 타입 배열, 동적 바인딩 |
3-1 | 예외 처리 | try-catch, ArithmeticException, 에러 메시지 처리 |
3-2 | Optional | Optional.ofNullable(), ifPresent, orElse |
3-3 | 컬렉션 | ArrayList, add/remove/contains/size, for-each |
3-4 | 제네릭 | class Box<T>, getValue(), 타입 안정성 |
3-5 | 람다 표현식 | @FunctionalInterface, 람다 문법 (x, y) -> x + y |
3-6 | 스트림(Stream) | .stream() → filter → map → forEach |
3-7 | 스레드 | extends Thread, implements Runnable, start(), join() |
총 18문제로 구성되어 있습니다.
16문제 이상 정답 시 통과, 미만일 경우 복습이 필요합니다.
정답은 공개되지 않으며, IntelliJ에서 에러 없이 실행될 경우 정답으로 인정합니다.
문제는 주석으로 달아놓았으며, 코드 복사해서 풀어보시면 됩니다.
문제의 번호는 강의와 일치합니다.
코드 복사/붙여넣기 시 첫 번째 줄(패키지 선언)을 삭제하지 마십시오. 패키지 이름이 없으면 컴파일 에러가 발생합니다.
문제 1-4: 변수 – 데이터의 저장 공간
// 문제 1-4: 변수 – 데이터의 저장 공간
// 1) int형 변수 num1에 10을,
// double형 변수 num2에 3.14를,
// char형 변수 ch에 'A'를 저장하세요.
// 2) 각 변수를 System.out.println으로 출력해 보세요.
public class Main {
public static void main(String[] args) {
}
}
// 출력결과
10
3.14
A
문제 1-5: 입출력 – 프로그램과 사용자 간의 대화
// 문제 1-5: 입출력 – 프로그램과 사용자 간의 대화
// 1) Scanner를 사용하여 사용자로부터 이름(name)과 나이(age)를 입력받으세요.
// 2) 입력받은 name과 age를 이용하여
// "안녕하세요, {name}님! 당신의 나이는 {age}세입니다."를 출력하세요.
import java.util.Scanner;
public class Main {
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();
}
}
//출력결과
이름을 입력하세요:
나이를 입력하세요:
안녕하세요, 한솔님! 당신의 나이는 28세입니다.
문제 1-6: 연산자 – 계산의 시작
// 문제 1-6: 연산자 – 계산의 시작
// 1) 정수형 변수 a에 15, b에 4를 저장하세요.
// 2) 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 연산 결과를
// 각각 System.out.println으로 출력하세요.
// 3) 나눗셈 결과는 소수점 이하까지 보고 싶다면, 한 쪽 피연산자를 double형으로 변환해 보세요.
public class Main {
public static void main(String[] args) {
}
}
// 출력결과
19
11
60
3.0
3
문제 1-7: 조건문 – 프로그램의 선택지
// 문제 1-7: 조건문 – 프로그램의 선택지
// 1) Scanner를 이용해 정수 점수(score)를 입력받으세요.
// 2) score가 90 이상이면 "A",
// 80 이상이면 "B",
// 70 이상이면 "C",
// 60 이상이면 "D",
// 그 외에는 "F"를 출력하세요.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 여기에 score 입력과 if-else 구문을 작성하세요
}
}
// 출력결과 입력에 따라 다름, 의도된대로 출력되어야 함
예) 99-> A, 20->F 등
문제 1-8: 반복문
// 문제 1-8: 반복문
// 1) for문을 이용해 1부터 5까지 숫자를 한 줄에 하나씩 출력하세요.
// 2) while문을 이용해 5부터 1까지 숫자를 역순으로 출력하세요.
public class Main {
public static void main(String[] args) {
// 1) for문 작성
// 여기에 for문 코드를 작성하세요
// 2) while문 작성
// 여기에 while문 코드를 작성하세요
}
}
//출력결과
1
2
3
4
5
5
4
3
2
1
문제 2-3: 래퍼 클래스
// 문제 2-3: 래퍼 클래스
// 1) int형 기본값 100을 Integer 래퍼 객체에 autoboxing 하여 저장하세요.
// 2) String "3.14"를 Double 래퍼의 parse 메서드를 사용해 double 기본형으로 변환하여 저장하세요.
// 3) char형 기본값 'Z'를 Character 래퍼 객체에 포장하세요.
// 4) 각 래퍼 객체에서 원시값을 unboxing 하여 System.out.println으로 출력하세요.
public class Main {
public static void main(String[] args) {
// 여기에 코드를 작성하세요
}
}
// 출력결과
100
3.14
Z
문제 2-5: final 키워드
// 문제 2-5: final 키워드
// 1) FinalTest 클래스에 final 변수 PI를 선언하고 3.14로 초기화하세요.
// 2) showPi() 메서드를 추가하여 "PI: {PI}" 형식으로 출력하게 하세요.
// 3) main 메서드에서 FinalTest 객체를 생성하고 showPi()를 호출하세요.
// 4) 마지막에 PI 값을 변경하려는 코드를 주석으로 작성해 보고,
// 컴파일 에러가 발생함을 확인해 보세요.
public class Main {
// 1) 여기에 final 변수 PI 선언 및 초기화
// 2) showPi() 메서드 작성
public static void main(String[] args) {
// 3) FinalTest 객체 생성 및 showPi() 호출
// 4) 아래에 PI 값을 변경하려는 코드(예: PI = 3.1415;)를 주석으로 작성
}
}
// 출력결과
PI: 3.14
문제 2-6: 인터페이스
// 문제 2-6: 인터페이스
// 1) Animal 인터페이스를 선언하고,
// void sound(); 메서드 시그니처만 정의하세요.
// 2) Dog 클래스가 Animal을 구현하도록 하고,
// sound()에서 "멍멍!"을 출력하세요.
// 3) Cat 클래스가 Animal을 구현하도록 하고,
// sound()에서 "야옹~"을 출력하세요.
// 4) main 메서드에서 Animal 타입 변수에
// Dog와 Cat 객체를 각각 대입하고,
// sound()를 호출해 보세요.
public class Main {
public static void main(String[] args) {
// 여기에 Animal 타입의 Dog, Cat 객체 생성 및 호출 작성
}
}
///////////////////////////흰트////////////
// 1) Animal 인터페이스 작성
// public interface Animal { ... }
// 2) Dog 클래스 작성
// public class Dog implements Animal { ... }
// 3) Cat 클래스 작성
// public class Cat implements Animal { ... }
//출력결과
멍멍!
야옹~
문제 2-7: 캡슐화 (Encapsulation)
// 문제 2-7: 캡슐화 (Encapsulation)
// 1) Person 클래스에 private 필드 name(String)과 age(int)를 선언하세요.
// 2) 각 필드에 대한 public getter와 setter를 작성하세요.
// 3) main 메서드에서 Person 객체를 생성하고,
// setter로 값을 설정한 뒤 getter로 꺼내서
// "이름: {name}, 나이: {age}" 형식으로 출력하세요.
public class Main {
public static void main(String[] args) {
// 여기에 Person 객체 생성, setter 호출, getter로 출력 작성
}
}
// 4) Person 클래스 작성 (아래에)
//출력결과
이름: 최한솔, 나이: 28
문제 2-8: 상속 (Inheritance)
// 문제 2-8: 상속 (Inheritance)
// 1) Vehicle 클래스를 선언하고,
// protected 필드 speed(int)와
// 메서드 void showSpeed()를 만들어
// “현재 속도: {speed}”를 출력하게 하세요.
// 2) Car 클래스가 Vehicle을 상속받고,
// 생성자에서 speed를 초기화하도록 하세요.
// 3) main 메서드에서 Car 객체를 생성하고
// showSpeed()를 호출해 보세요.
public class Main {
public static void main(String[] args) {
// 여기에 Car 객체 생성 및 showSpeed() 호출 작성
}
}
// 아래에 Vehicle, Car 클래스 작성
// 예시
// public class Vehicle { … }
// public class Car extends Vehicle { … }
TODO: 딱 네 가지 키워드와 개념만 기억
- **`extends`**
- **`super(...)`**
- **`protected` vs `private` vs `public`**
- **부모(슈퍼) vs 자식(서브)의 역할 분담**
// 출력결과
현재 속도: 120
문제 2-10: 다형성 (Polymorphism)
// 문제 2-10: 다형성 (Polymorphism)
// 1) Animal 클래스를 선언하고,
// public void sound() 메서드를 정의하여
// "동물 소리"를 출력하게 하세요.
// 2) Dog 클래스가 Animal을 상속받아 sound()를 오버라이드하고,
// "멍멍!"을 출력하게 하세요.
// 3) Cat 클래스가 Animal을 상속받아 sound()를 오버라이드하고,
// "야옹~"을 출력하게 하세요.
// 4) PolymorphismTest 클래스의 main 메서드에서
// Animal 타입 배열에 Dog, Cat 객체를 담고,
// for-each 문으로 각 요소의 sound()를 호출해 보세요.
public class Main {
public static void main(String[] args) {
}
}
//출력결과
멍멍!
야옹~
문제 3-1: 예외 처리 (Exception Handling)
// 문제 3-1: 예외 처리 (Exception Handling)
// 1) divide 메서드를 작성하여 두 정수 a, b를 매개변수로 받아
// a / b 결과를 반환하도록 하세요.
// 2) main 메서드에서 divide를 호출할 때
// try-catch 구문으로 ArithmeticException을 처리하고,
// b가 0일 경우 “0으로 나눌 수 없습니다.”를 출력하도록 하세요.
// 3) 예외가 발생하지 않으면 “결과: {값}” 을 출력하세요.
public class Main {
// 1) 여기서 divide 메서드 작성
public static void main(String[] args) {
int x = 10;
int y = 0; // 이 값을 바꿔가며 테스트 하기.
// 2) 아래에서 divide 호출 및 예외 처리
}
}
//출력결과
0으로 나눌 수 없습니다.
문제 3-2: Optional 클래스
// 문제 3-2: Optional 클래스
// 1) String 타입 변수 str을 null로 초기화하세요.
// 2) Optional<String> opt = Optional.ofNullable(str)로 옵셔널 객체를 생성하세요.
// 3) opt.ifPresent()를 사용해 값이 있으면 "값: {값}"을 출력하세요.
// 4) opt.orElse("기본값")을 이용해, 값이 없을 때는 "기본값"을 출력하세요.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// 여기에 코드 작성
}
}
//출력결과
기본값
문제 3-3: 컬렉션 (Collections)
// 문제 3-3: 컬렉션 (Collections)
// 1) ArrayList<Integer> list를 생성하고,
// 1, 2, 3, 4, 5를 순서대로 추가하세요.
// 2) for-each 문을 이용해 각 요소를 한 줄씩 출력하세요.
// 3) list.remove(Integer.valueOf(3)); 으로 값 3을 삭제하고,
// 삭제 후 list.contains(3) 결과를 출력하세요.
// 4) list.size()를 통해 현재 리스트 크기를 출력하세요.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
}
}
//출력결과
1
2
3
4
5
false
4
문제 3-4: 제네릭 (Generics)
// 문제 3-4: 제네릭 (Generics)
// 1) 제네릭 클래스 Box<T>를 선언하고,
// private T value 필드를 선언하세요.
// 2) 생성자를 통해 value를 초기화하고,
// public T getValue() 메서드를 작성하세요.
// 3) main 메서드에서 Box<String>에 문자열을 담아
// getValue()로 꺼내 출력하세요.
// 4) Box<Integer>에 정수를 담아 getValue()로 꺼내 출력하세요.
public class Main {
public static void main(String[] args) {
// 문자열 박스 테스트
// 정수 박스 테스트
}
}
// 여기에 Box 클래스 작성
// class Box<T> { … }
//출력결과
Hello, 제네릭!
2005
문제 3-5: 람다 표현식 (Lambda)
// 문제 3-5: 람다 표현식 (Lambda)
// 1) @FunctionalInterface 인터페이스 Operation을 선언하고,
// int apply(int x, int y); 메서드 시그니처만 정의하세요.
// 2) main 메서드에서 Operation add = (x, y) -> x + y;
// Operation mul = (x, y) -> x * y; 람다로 구현하세요.
// 3) add.apply(5, 7)과 mul.apply(5, 7) 결과를 각각 출력하세요.
public class Main {
public static void main(String[] args) {
// 여기에 Operation 람다 구현 및 호출 코드 작성
}
}
// 1) Operation 인터페이스 작성
// @FunctionalInterface
// interface Operation { … }
//출력결과
5 + 7 = 12
5 * 7 = 35
문제 3-6: 스트림 (Streams)
// 문제 3-6: 스트림 (Streams)
// 1) List<Integer> nums에 1, 2, 3, 4, 5, 6을 추가하세요.
// 2) 이 리스트를 스트림으로 변환하여
// 짝수만 필터링(filter)하고,
// 각 요소를 10배(map)한 뒤,
// forEach로 한 줄씩 출력하세요.
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 1) 리스트 생성
// 2) 스트림으로 짝수 필터 → 10배 매핑 → 출력
// 여기에 filter, map, forEach를 연결하세요
}
}
//추가정보: 메서드 레퍼런스-> "System.out::println"
//출력결과
20
40
60
문제 3-7: 스레드 (Threads)
// 문제 3-7: 스레드 (Threads)
// 1) Thread를 상속받아 MyThread 클래스를 만들고,
// run() 메서드 안에서 1부터 5까지 숫자를 한 줄에 하나씩 출력하세요.
// 2) Runnable 인터페이스를 구현해 MyRunnable 클래스를 만들고,
// run() 메서드 안에서 1부터 5까지 숫자를 한 줄에 하나씩 출력하세요.
// 3) main 메서드에서 MyThread 인스턴스와,
// new Thread(new MyRunnable())를 생성해 start()를 호출하세요.
// 4) 두 스레드가 모두 종료될 때까지 join()으로 대기하고,
// “모든 스레드 종료”를 출력하세요.
public class Main {
public static void main(String[] args) throws InterruptedException {
// 3) MyThread, Thread(MyRunnable) 생성 및 start()
// TODO: Thread t1 = new MyThread();
// TODO: Thread t2 = new Thread(new MyRunnable());
// TODO: t1.start(); t2.start();
// 4) join 대기 후 메시지 출력
// TODO: t1.join(); t2.join();
// TODO: System.out.println("모든 스레드 종료");
}
}
// 1) MyThread 클래스 작성
// public class MyThread extends Thread { … }
// 2) MyRunnable 클래스 작성
// public class MyRunnable implements Runnable { … }
//출력결과
MyThread: 1
MyRunnable: 1
MyThread: 2
MyRunnable: 2
MyThread: 3
MyRunnable: 3
MyThread: 4
MyRunnable: 4
MyThread: 5
MyRunnable: 5
모든 스레드 종료
'Spring_부캠 > 두고두고 볼 개념' 카테고리의 다른 글
[Spring] HTTP & 네트워크 & Web 기초 입문 (1주차 강의 정리) (1) | 2025.07.22 |
---|---|
[Java] Lambda & Streams (1) | 2025.07.18 |
[Java]Generics (2) | 2025.07.18 |
[Java] enum (2) | 2025.07.17 |
[Java] Optinal 대체 왜 쓰는데? (2) | 2025.07.11 |