Spring_부캠/두고두고 볼 개념

[Java] Quize

FS29 2025. 7. 11. 09:48

 

아래 퀴즈를 통해 다음과 같은 개념을 익힐 수 있어요.

 

 

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