본문 바로가기

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

[2024-2 Java 스터디] 김재승 #2주차

반응형

# map

맵은 대응관계를 쉽게 해주는 자료형으로 딕셔너리와 비슷합니다. 

예를 들어

key value
people 사람
baseball 야구

 

이와 같이 리스트나 배열과 다르게 순서와 관계없이 특정 키에 값을 대응시켜 값을 얻을 수 있습니다.

 

맵의 자료형 중 가장 흔히 쓰이는 Hashmap 과 메서드에 대해 알아보겠습니다.

 

 

  • put(K key, V value): 키에 해당하는 값을 저장합니다. 키가 이미 존재하면 값을 덮어씁니다.
map.put("Apple", 10); //Apple이라는 key에 10이라는 value 대응시키기
  • get(Object key): 주어진 키에 매핑된 값을 반환합니다. 값이 없으면 null을 반환합니다.
Integer value = map.get("Apple");   //value = 10
  • remove(Object key): 주어진 키에 매핑된 값을 삭제합니다.
map.remove("Banana"); //Banana가 삭제되면서 Banana에 value값을 리턴
  • containsKey(Object key): 특정 키가 Map에 존재하는지 여부를 반환합니다.
boolean hasApple = map.containsKey("Apple");  // true or false 값이 저장됨
  • containsValue(Object value): 특정 값이 Map에 존재하는지 여부를 반환합니다.
boolean hasValue10 = map.containsValue(10);
  • size(): Map에 저장된 키-값 쌍의 개수를 반환합니다.
int size = map.size();
  • clear(): Map의 모든 항목을 삭제합니다.
map.clear();
  • keySet(): Map에 있는 모든 키를 Set으로 반환합니다.
Set<String> keys = map.keySet();

 

 

 

# set

세트, 즉 집합이라는 자료형은 집합과 관련된 것을 쉽게 처리하기 위해 만든 것으로 중복을 허용하지 않으며 순서가 없다는 특징이 있습니다.

예를 들어

세트 입력값 세트 출력값
h,e,l,l,o e,h,l,o

 

이와 같이 중복 요소를 제거하고 랜덤적인 순서로 출력값이 도출됩니다.

 

     집합 자료형 중 가장 널리 쓰이는 HashSet에 대해 알아보고 그의 활용과 메서드에 대해 알아보겠습니다.

 

-집합구하기

 

  • retainAll(): intersection(교집합)을 구할 때 사용됩니다.
  • addAll(): union(합집합)을 구할 때 사용됩니다.
  • removeAll(): substract(차집합)을 구할 때 사용됩니다.

 

-주요 메서드

 

  • add(E e): 주어진 요소를 Set에 추가합니다. 이미 존재하는 요소라면 추가되지 않고 false를 반환합니다.
set.add("Apple");  //addAll 메서드에 경우 여러가지 요소를 한 번에 추가할 수 있습니다.
  • remove(Object o): 주어진 요소를 Set에서 제거합니다.
set.remove("Banana");
  • contains(Object o): 주어진 요소가 Set에 존재하는지 확인합니다.
boolean exists = set.contains("Orange");
  • size(): Set에 저장된 요소의 개수를 반환합니다.
int size = set.size();
  • isEmpty(): Set이 비어 있는지 여부를 확인합니다.
boolean empty = set.isEmpty();
  • clear(): Set의 모든 요소를 제거합니다.
set.clear();

 

 

# enum

enum은 상수들의 집합을 정의할 때 사용되며 각 상수가 특정한 이름을 가진 고정값이여야 합니다. 

 

   enum의 특징
  • enum은 여러 상수값을 그룹화하여 처리할 때 유용합니다.
  • 각 상수는 기본적으로 0부터 시작하는 정수 값으로 매핑되지만, 더 복잡한 값을 설정하거나 메소드를 포함할 수도 있습니다.
  • enum은 클래스와 유사하며, 생성자, 메소드, 필드를 가질 수 있습니다.

 

사용예시

 

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumExample {
    public static void main(String[] args) {
        Day today = Day.MONDAY;

        // Enum 값 출력
        System.out.println("오늘은: " + today);

        // Enum을 사용한 조건문
        if (today == Day.MONDAY) {
            System.out.println("월요일입니다.");
        }
    }
}

 

# final

final은 변경할 수 없는 값이나 메서드, 클래스를 정의할 때 사용됩니다.

 

사용예시
public class FinalExample {
    public static void main(String[] args) {
        final int MAX_VALUE = 100;
        // MAX_VALUE = 200;  // 오류 발생, 값 변경 불가
        System.out.println("최대 값은: " + MAX_VALUE);
    }
}

final 변수

class Parent {
    public final void display() {
        System.out.println("부모 클래스의 메소드");
    }
}

class Child extends Parent {
    // public void display() { }  // 오류 발생, 오버라이딩 불가
}

final 메서드

final class FinalClass {
    // 클래스 내용
}

// class ChildClass extends FinalClass { }  // 오류 발생, 상속 불가

final 클래스

# if

if문은 자바에서 조건을 검사하고, 그 조건이 참일 때 특정 코드를 실행하는 제어문입니다. 조건이 거짓일 경우 해당 코드를 건너뜁니다.

 

사용예시
int score = 85;

if (score >= 90) {
    System.out.println("A 학점");
} else if (score >= 80) {
    System.out.println("B 학점");
} else {
    System.out.println("C 학점");
}

이와 같이 score에 경우의 수를 if , else if , else 로 나눠 각각의 명령을 내리면서 프로그램의 흐름을 만들 수 있습니다.

 

#switch / case

switch 문은 여러 가지 경우의 수를 처리할 때 사용되는 조건문입니다. 주로 값에 따라 실행할 코드가 다를 때 사용하며, if-else 문보다 코드가 간결해지는 장점이 있습니다. 주어진 값이 특정 case와 일치하면 해당 블록의 코드가 실행됩니다. if-else 문처럼 조건을 검사하지만, 값의 일치 여부를 기준으로 동작합니다.

 

 

사용예시
String fruit = "Apple";

switch (fruit) {
    case "Apple":
        System.out.println("사과입니다.");
        break;
    case "Banana":
        System.out.println("바나나입니다.");
        break;
    default:
        System.out.println("알 수 없는 과일입니다.");
}

이와 같이 switch ( ) 안에 들어가는 변수의 값이 무엇이냐에 따라 case를 분류하고 해당 case ( ) 안에 들어가는 값과 변수의 값이 동일할 때 해당 case에 포함되는 명령을 실행합니다. 위에 코드의 출력값은 "사과입니다." 에 해당합니다.

 

# while

while 문은 조건이 참일 때 반복해서 코드를 실행하는 반복문입니다. 조건이 참인 동안 계속 반복되며, 조건이 거짓이 되면 반복이 종료됩니다. 따라서, 조건이 언제 거짓이 되는지를 잘 설정해서 무한 루프에 빠지지 않도록 주의해야 합니다.

 

사용예시
public class WhileExample {
    public static void main(String[] args) {
        int i = 0;

        // while 문을 사용한 반복
        while (i < 5) {
            System.out.println("i의 값: " + i);
            i++;  // i 값을 1씩 증가시켜 반복이 끝나도록 설정
        }
    }
}

처음 정수형 변수 i의 값이 0으로 설정되어있으니 while (i<5) 를 만족시키는 동안 while  문 안에 명령을 실행하고 안에 명령이 반복되어 i<5를 만족시키지 않는 순간부터 while문을 나오게 됩니다. 만약 명령어의 i++ >> i--였다면 while문은 조건에 대해 항상 참이므로 무한루프를 돌게 될 것입니다.

 

# for 

for 문은 반복 횟수가 정해졌을 때 사용하는 반복문입니다. 초기화, 조건식, 증감식을 한 줄에 작성하여 반복의 시작, 종료, 그리고 진행 방식을 명확히 정의할 수 있어 반복을 제어하기에 효율적입니다.

 

사용예시
public class ForExample {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("i의 값: " + i);
        }
    }
}

해당 코드에서 for ( ) 안에  정수형 i 변수가 0으로 설정되어있고 i < 5인 동안 i++ 하겠다는 조건을 써둔 뒤 for문 안에 명령이 해당 조건을 성립하는 동안 반복되고 조건을 벗어나게 될 시 for문은 멈추게 됩니다. 위 코드의 출력값은 다음과 같습니다.

i의 값: 0
i의 값: 1
i의 값: 2
i의 값: 3
i의 값: 4

 

 #for - each

for-each 문은 컬렉션이나 배열과 같은 반복 가능한 요소들을 순차적으로 처리할 때 사용됩니다. 인덱스를 사용하지 않고 배열이나 컬렉션의 각 요소를 자동으로 반복하므로 코드가 간결하고 실수할 확률이 적습니다. 그러나 반복 중 요소를 변경하거나 인덱스가 필요한 경우에는 적합하지 않습니다.

 

사용예시
public class ForEachExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        for (int num : numbers) {
            System.out.println("숫자: " + num);
        }
    }
}

해당 코드에서 for ( ) 안에 정수형 변수 num 이라는 곳에 numbers 라는 배열이 한 바퀴 돌아가면서 저장됩니다. 

저장하는 동시에 for문 안에 있는 명령이 실행되며 출력값은 다음과 같습니다.

숫자: 1
숫자: 2
숫자: 3
숫자: 4
숫자: 5

 

---퀴즈 3.5---
다음 중 HashMap의 특징은? c

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

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

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

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

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

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

Java에서 자동 형 변환(implicit casting)이 이루어지는 경우는? c 

다음 코드의 출력 결과는 무엇인가? a(캐스팅)

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

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

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

1. Java의 `Set` 인터페이스를 사용하는 목적에 대해 서술하시오.
> set인터페이스는 중복된 값을 허용하지 않는 컬렉션을 만들때 사용된다.

2. 형 변환(타입 캐스팅)의 개념을 설명하고, 자바에서의 자동 형 변환과 수동 형 변환의 차이점을 서술하시오.
> 타입 캐스팅은 한 자료형의 값을 다른 자료형을 변환하는 것으로 작은 크기의 자료형에서 큰 크기의 자료형으로 이동할 때
자동 형 변환이 이루어지고 큰 크기의 자료형을 작은 크기의 자료형을 변환할 때 수동 형 변환이 필요하다.

3. Java의 `final` 키워드에 대해 설명하고, `final` 변수를 사용할 때의 장점을 서술하시오.
> final을 사용하면 해당 값이 절대로 변하지 않음을 의미하며 값이 변경될 수 없어서 코드의 예측 가능성이 높아지고 
멀티 스레드 환경에서 데이터의 일관성을 유지하는 데 유리하다.

4. 형 변환 시 발생할 수 있는 예외 상황에 대해 설명하고, `ClassCastException`이 발생하는 경우를 예로 들어 설명하시오.
>  형 변환 시 발생할 수 있는 대표적인 예외 상황으로 ClassCastException이 존재하는데 이는 부모 클래스 타입으로 저장된
객체를 자식 클래스 타입으로 잘못 변환할 때 발생하며 예를 들어
Object obj = new String("Hello");
Integer num = (Integer) obj; // ClassCastException 발생

 

---퀴즈 4---

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

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

다음 중 중첩 if 문의 예는? b

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

---코테 3.5 - 1---

 

---코테 3.5 - 2 ---

---코테 4 - 1 ---

---코테 4 - 2 ---

 

반응형