본문 바로가기

WINK-(Web & App)/JAVA 스터디

[2024-2 Java 스터디] 강보경 #2주차

반응형

map

- 대응 관계를 쉽게 표현해주는 자료형

- 키(key) & 값(value)

- HashMap

   1) put : 키 & 값 추가

   2) get : 키에 해당하는 값 얻

   3) containsKey : 해당 키가 있는지 참거짓으로 리턴

   4) remove : 해당 키 삭제 후 값 리턴

   5) size : 맵 요소 개수 리턴

   6) keySet : 모든 키 모아서 리턴

import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("baseball", "야구");
        System.out.println(map.get("people")); // "사람" 출력
        System.out.println(map.containsKey("people"));  // true 출력
        System.out.println(map.keySet());  // [baseball, people] 출력
        System.out.println(map.remove("people"));  // "사람" 출력
        System.out.println(map.size());  // 1 출력   
    }
}

 

 

집합

- 중복 허용 X, 순서 X

- 메서드

   1) add : 집합 자료형 추가

   2) addAll : 값 여러 개 추가

   3) remove : 값 제거

import java.util.Arrays;
import java.util.HashSet;

public class Sample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("Jump");
        set.addAll(Arrays.asList("To", "Java"));
        System.out.println(set);  // [Java, To, Jump] 출력
        set.remove("To");
        System.out.println(set);  // [Java, Jump] 출력
    }
}

 

- 0집합구하깅

import java.util.Arrays;
import java.util.HashSet;

public class Sample {
    public static void main(String[] args) {
        HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9));
    }
}

 

   1) 교집합 : retainAll 사용

HashSet<Integer> intersection = new HashSet<>(s1);  // s1으로 intersection 생성
        intersection.retainAll(s2);  // 교집합 수행
        System.out.println(intersection);  // [4, 5, 6] 출력

 

   2) 합집합 : addAll 사용

HashSet<Integer> union = new HashSet<>(s1);  // s1으로 union 생성
        union.addAll(s2); // 합집합 수행
        System.out.println(union);  // [1, 2, 3, 4, 5, 6, 7, 8, 9] 출력

 

   3) 차집합 : removeAll 사용

HashSet<Integer> substract = new HashSet<>(s1);  // s1으로 substract 생성
        substract.removeAll(s2); // 차집합 수행
        System.out.println(substract);  // [1, 2, 3] 출력

 

 

상수 집합 (enum)

enum CoffeeType {
    AMERICANO,
    ICE_AMERICANO,
    CAFE_LATTE
};

 

- 상수 집합 사용

public class Sample {
    enum CoffeeType {
        AMERICANO,
        ICE_AMERICANO,
        CAFE_LATTE
    };

    public static void main(String[] args) {
        System.out.println(CoffeeType.AMERICANO);  // AMERICANO 출력
        System.out.println(CoffeeType.ICE_AMERICANO);  // ICE_AMERICANO 출력
        System.out.println(CoffeeType.CAFE_LATTE);  // CAFE_LATTE 출력
        
        // 반복문 사용
        for(CoffeeType type: CoffeeType.values()) {
            System.out.println(type);  // 순서대로 AMERICANO, ICE_AMERICANO, CAFE_LATTE 출력
    }
}

 

- 장점 : 코드가 명확, 잘못된 값을 이용해 생길 수 있는 오류 막을 수 있음

 

 

형 변환

- 문자열 -> 정수 : Integer.parseInt, String num = "" + (정수);

- 정수 -> 문자열 : String.valueOf, Integer.toString

- 문자열 -> 소수 : Double.parseDouble, Float.parseFloat

- 실수 형태의 문자열 -> 정수 : NumberFormatException 발생 => Double.parseDouble로 실수로 바꾼 후 사용

 

 

final

- 자료형에 값을 단 한 번만 설정

- final int n= 123;

  n = 456;  // 컴파일 오류 발생

 

 

if 문

- 조건을 판단하여 해당 조건에 맞는 상황 수행

- if (조건문) {

     <수행할 문장1>;

     <수행할 문장2>; ...

   } else {

     <수행할 문장A>;

     <수행할 문장B>; ... }

- 비교 연산자

x < y x가 y보다 작다
x > y x가 y보다 크다
x == y x와 y가 같다
x != y x와 y가 다르다
x >= y x가 y보다 크거나 같다
x <= y x가 y보다 작거나 같다

- and, or, not 연산자

x && y x와 y 모두 참이면 참
x || y x와 y 둘 중 하나 참이면 참
!x x가 거짓이면 참
int money = 2000;
boolean hasCard = true;

if (money>=3000 || hasCard) {
    System.out.println("택시를 타고 가라");
} else {
    System.out.println("걸어가라");
}  // "택시를 타고 가라" 출력

- contains : 리스트 자료형에 해당하는 애가 있는지 조사하는 메서드

- else if : 이전 조건문이 거짓일 때 수행

 

 

switch/case 문

- switch(입력변수) {
    case 입력값1: ...
         break;
    case 입력값2: ...
         break;
    ...
    default: ...
         break;
}

public class Sample {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {  // 입력 변수의 자료형은 byte, short, char, int, enum, String만 가능하다.
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}  // August

 

 

while 문

- while (조건문) {
    <수행할 문장1>;
    <수행할 문장2>;
    <수행할 문장3>;
    ...
}

int treeHit = 0;
while (treeHit < 10) {
    treeHit++;  // treeHit += 1 로도 표현 가능
    System.out.println("나무를  " + treeHit + "번 찍었습니다.");
    if (treeHit == 10) {
        System.out.println("나무 넘어갑니다.");
    }
}
/* "나무를  1번 찍었습니다.
나무를  2번 찍었습니다.
나무를  3번 찍었습니다.
나무를  4번 찍었습니다.
나무를  5번 찍었습니다.
나무를  6번 찍었습니다.
나무를  7번 찍었습니다.
나무를  8번 찍었습니다.
나무를  9번 찍었습니다.
나무를  10번 찍었습니다.
나무 넘어갑니다." 출력 */

- 무한 루프 : 무한히 수행

while (true) {
    System.out.println("Ctrl-C를 눌러야 while문을 빠져 나갈 수 있습니다.");
}
/* Ctrl-C를 눌러야 while문을 빠져 나갈 수 있습니다.
Ctrl-C를 눌러야 while문을 빠져 나갈 수 있습니다.
(... 생략 ...) */

- break : while문 강제로 멈춰서 빠져나가기

int coffee = 10;
int money = 300;

while (money > 0) {
    System.out.println("돈을 받았으니 커피를 줍니다.");
    coffee--;
    System.out.println("남은 커피의 양은 " + coffee + "입니다.");
    if (coffee == 0) {
        System.out.println("커피가 다 떨어졌습니다. 판매를 중지합니다.");
        break;
    }
}

- continue : while문으로 돌아가기

int a = 0;
while (a < 10) {
    a++;
    if (a % 2 == 0) {
        continue;  // 짝수인 경우 조건문으로 돌아간다.
    }
    System.out.println(a);  // 홀수만 출력된다.
}

 

 

for 문

- for (초기치; 조건문; 증가치) {
    ...
}

String[] numbers = {"one", "two", "three"};
for(int i=0; i<numbers.length; i++) {
    System.out.println(numbers[i]);
}

- continue : for문으로 돌아가기

- 이중 for문

for(int i=2; i<10; i++) {
    for(int j=1; j<10; j++) {
        System.out.print(i*j+" ");
    }
    System.out.println("");  // 줄을 바꾸어 출력하는 역할을 한다.
}

 

 

for each 문

- for (type 변수명: iterate) {
    body-of-loop
}

iterate에 사용할 수 있는 자료형: 배열, ArrayList 등

String[] numbers = {"one", "two", "three"};
for(int i=0; i<numbers.length; i++) {
    System.out.println(numbers[i]);
}  // for문

String[] numbers = {"one", "two", "three"};
for(String number: numbers) {
    System.out.println(number);
}  // for each문으로 변경

 

 

QUIZ

<3.5>

1. 다음 중 HashMap의 특징은?

- null 키를 허용한다.

 

2. Map에서 키-값 쌍을 추가할 때 사용하는 메서드는?

- put()

 

3. 다음 코드의 출력 결과는 무엇인가?

Map<String, Integer> map = new HashMap<>();
map.put("Java", 8);
map.put("Python", 3);
System.out.println(map.get("Java"));

- 8

 

4. Map에 키가 존재하는지 여부를 알 수 있는 메서드는?

- containsKey

 

5. Set의 주요 특징 중 하나는 무엇인가?

- 중복된 요소를 허용하지 않는다.

 

6. 다음 코드의 출력 결과는 무엇인가?

Set<String> set = new HashSet<>();
set.add("Java");
set.add("Java");
System.out.println(set.size());

- 1

 

7. Set에 요소를 추가할 때 사용하는 메서드는?

- add()

 

8. Java에서 자동 형 변환이 이루어지는 경우는?

- int에서 double로 변환할 때

 

9. 다음 코드의 출력 결과는 무엇인가?

double d = 9.78;
int i = (int) d;
System.out.println(i);

- 9

 

10. 다음 중 final 키워드의 올바른 사용법이 아닌 것은?

- final 변수를 재할당할 수 있다.

 

11. Java에서 기본형 타입을 참조형 타입을 변환할 때 사용하는 클래스는?

- Wrapper

 

12. 다음 코드의 출력 결과는 무엇인가?

final int x = 10;
x = 15; // 이 줄에서 에러 발생
System.out.println(x);

- Error

 

서술형1. Java의 Set 인터페이스를 사용하는 목적에 대해 서술하시오.

- 중복을 허용하지 않는다는 장점이 있다.

 

서술형2. 형 변환의 개념을 설명하고, 자바에서의 자동 형 변환과 수동 형 변환의 차이점을 서술하시오.

- 자료형을 변경하는 것이다. 자동 형 변환은 컴파일러가 해주는 작업이고 작은 자료형에서 큰 자료형으로 변환되어 손실 값이 일어나지 않아 안전하다. 수동 형 변환은 큰 자료형에서 작은 자료형으로 사용자가 직접 변환한다. 손실이 있을 수 있다.

 

서술형3. Java의 final 키워드에 대해 설명하고, final 변수를 사용할 때의 장점을 서술하시오.

- final을 사용하면 자료형에 한 가지의 값 밖에 저장하지 못한다. 해당 값을 변경할 수 없으므로 프로그램을 수행하면서 그 값이 바뀌면 안될 때 사용한다. 안전성과 일관성이 높다.

 

서술형4. 형 변환 시 발생할 수 있는 예외 상황에 대해 설명하고, ClassCastException이 발생하는 경우를 예를 들어 설명하시오.

- 자료형 간 변환이 적절하지 않거나 호환되지 않을 때 예외 상황이 발생한다. ClassCastException은 상위 클래스 타입의 객체를 잘못된 하위 클래스 타입으로 캐스팅할 때 일어나는 예외 상황이다.

 

코딩테스트

 

 

<4>

1. 다음 코드의 출력 결과는 무엇일까?

int num = 10;
if (num > 5) {
    System.out.println("A");
} else {
    System.out.println("B");
}

 

2. 다음 중 if 문의 올바른 사용법은?

// b
if (x > 10)
    System.out.println("x는 10보다 큽니다.");

 

3. 다음 중 중첩 if  문의 예는?

// a
if (a > b)
    if (b > c)
        System.out.println("a > b > c");

 

4. 다음 if-else if-else 구조에서 result의 값은 무엇인가?

int score = 85;
String result;

if (score >= 90) {
    result = "A";
} else if (score >= 80) {
    result = "B";
} else {
    result = "C";

- B

 

5. 다음 if 문에서 논리 오류가 있는 것은?

// b
if (x == 10) {
    System.out.println("x는 10입니다.");
}

 

6. 다음 코드는 출력 결과는 무엇인가?

int day = 3;
switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    default:
        System.out.println("Invalid day");
}

- Wednesday

 

7. switch 문에서 break 문을 생략하면 어떤 결과가 발생하는가?

- 다음 case의 코드도 연속적으로 실행된다.

 

8. 다음 중 switch 문의 올바른 사용 예는?

// c
switch (x) {
    case 1:
        System.out.println("One");
        break;
    case 2:
        System.out.println("Two");
        break;
    default:
        System.out.println("Other");
}

 

9. 다음 코드의 출력 결과는 무엇인가?

char grade = 'B';
switch (grade) {
    case 'A':
        System.out.println("Excellent");
        break;
    case 'B':
        System.out.println("Good");
    case 'C':
        System.out.println("Fair");
        break;
    default:
        System.out.println("Poor");
}

- Good

   Fair

 

10. 다음 중 switch 문에서 사용할 수 없는 자료형은?

- double

 

11. 다음 코드의 출력 결과는 무엇인가?

for (int i = 0; i < 3; i++) {
    System.out.print(i + " ");
}

- 0 1 2

 

12. 다음 중 무한 루프를 생성하는 for 문의 예는?

// d
for (int i = 0; i <= 10; i--) {}

 

13. 다음 코드의 출력 결과는 무엇인가?

for (int i = 5; i > 0; i--) {
    if (i == 3) {
        break;
    }
    System.out.print(i + " ");
}

- 5 4

 

14. 다음 중 for 문을 사용하여 1부터 10까지의 합을 구하는 올바른 코드는?

// a
int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum += i;
}
System.out.println(sum);

// c
int sum = 0;
for (int i = 0; i <= 10; i++) {
    sum += i;
}
System.out.println(sum);

 

15. 다음 코드의 출력 결과는 무엇인가?

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

- 0 1 3 4

 

16. 다음 코드의 출력 결과는 무엇인가?

int i = 1;
while (i <= 3) {
    System.out.print(i + " ");
    i++;
}

- 1 2 3

 

17. 다음 중 무한 루프를 생성하는 while 문의 예는?

// a
while (true) {}

 

18. 다음 코드의 출력 결과는 무엇인가?

int count = 0;
while (count < 5) {
    if (count == 3) {
        count++;
        continue;
    }
    System.out.print(count + " ");
    count++;
}

- 0 1 2 4

 

19. 다음 중 while 문을 사용하여 1부터 10까지의 홀수를 출력하는 올바른 코드는?

// d
int i = 1;
while (i <= 10) {
    if (i % 2 != 0) {
        System.out.print(i + " ");
    }
    i++;
}

int i = 1;
while (i < 10) {
    System.out.print(i + " ");
    i += 2;
}

 

20. 다음 코드의 출력 결과는 무엇인가?

int i = 0;

while (i < 3) {
    System.out.print(i + " ");
    i += 2;
}

- 0 2

 

21. 다음 코드의 출력 결과는 무엇인가?

int[] numbers = {1, 2, 3, 4, 5};

for (int num : numbers) {
    System.out.print(num + " ");
}

- 1 2 3 4 5

 

22. 다음 중 for-each 문을 사용하는 이유로 옳지 않은 것은?

- 요소를 수정할 수 있기 위해

 

23. 다음 코드의 출력 결과는 무엇인가?

String[] fruits = {"Apple", "Banana", "Cherry"};

for (String fruit : fruits) {
    System.out.print(fruit.charAt(0) + " ");
}

- A B C

 

24. 다음 중 for-each 문을 사용하여 리스트의 모든 요소를 출력하는 올바른 코드는?

// d

List<String> list = Arrays.asList("Java", "Python", "C++");

for (String lang : list) {
    System.out.println(lang);
}


List<String> list = Arrays.asList("Java", "Python", "C++");

for (Object obj : list) {
    System.out.println(obj);
}

 

25. 다음 코드의 출력 결과는 무엇인가?

int[] numbers = {2, 4, 6, 8};
int sum = 0;

for (int num : numbers) {
    sum += num;
}

System.out.println(sum);

- 20

 

코딩테스트

반응형