본문 바로가기

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

[2024-2 Java 스터디] 이서영 #2주차

반응형

 

 

저번주에 실수로 3장까지 다 했어서 간단히 핵심이라고 생각되는 부분만 적겠습니다...

 

1. 자료형 (맵, 집합, 상수집합, 형 변환과 final)

 

1-1. 맵

→ 대응 관계를 표현해줌

키(key)와 값(value)이 한 쌍, 키를 이용해 값을 얻는다

순서 의존 x

but 순서대로 원할 때?

LinkedHashMap(입력된 순서대로 데이터 저장), TreeMap(입력된 key의 오름차순 데이터 저장)

 

ex) 

키(key) 값(value)
people 사람
fruit 오렌지

 

맵의 자료형   HashMap, LinkedHashMap, TreeMap

 

HashMap

 

put key와 value 추가

HashMap<String,String>map = new HashMap<>();
map.put("people","사람");
map.put("fruit","오렌지");

 

get → key에 해당하는 value 얻음

System.out.println(map.get("fruit")); // "오렌지" 출력

 

맵의 key에 해당하는 value 없을 때

get 사용, null 출력

getOrDefault 메서드, 기본값(default) 얻음

 

containsKey 맵에 해당 key가 있는지 참 또는 거짓으로 리턴

remove   맵의 항목을 삭제, key항복 삭제 후 value 값 리턴

size   맵 요소의 개수 리턴

keySet 맵의 모든 key 모아서 리턴

 

 

1-2. 집합

집합을 쉽게 처리

→ 중복 허용 x 

순서 x 

HashSet

 

HashSet<String> set = new HashSet<>(Arrays.asList("H","e","l","l","o"));
System.out.println(set); // [e,H,l,o] 출력

 

교집합 구하기 retainAll 메서드 

합집합 구하기   addAll 메서드

차집합 구하기 removeAll 메서드

 

집합 자료형과 관련된 메서드

add   집합 자료형에 값 추가

addAll 값 한번에 여러 개 추가

remove   특정 값 제거

 

 

1-3. 상수집합

enum 자료형, 여러 개 상수 집합 정의

enum PastaType {
	TOMATO,
    CREAM,
    OIL
};

 

enum 왜 씀?

→ 매직넘버사용보다 코드가 명확 (매직넘버 : 상수로 선언하지 않고 사용하는 숫자)

잘못된 값 사용해 생길 수 있는 오류 막음 

 

1-3. 형 변환과 final

 

자료형 변환

 

문자열 정수 : Integer 클래스 

정수 문자열 : 정수 앞에 "" , String.valueOf(정수), Integer.toString(정수)

소수점 포함 문자열 → 실수 : Double.parseDouble, Float.parseFloat

정수 실수

int n1 = 123; 
double d1 = n1; // 정수 → 실수, 캐스팅 필요 x

double d2 = 123.456;
int n2 = (int) d2; // 실수 → 정수, 캐스팅

캐스팅 : (int) 같이 강제로 바꾸는 거

 

실수형태의 문자열  정수 : Double.parseDoube() 사용해 실수로 바꾸고 사용

 

 

final

자료형에 값 한번만 설정 (상수 선언)

리스트도 못 바꿈

 

 

2. 제어문

 

2-1. if 문

if 문 주어진 조건이 참일 때 실행

else 문 if 문의 조건이 거짓일 때 실행

 

비교연산자

→ 조건, 판단에 사용

비교연산자 설명
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가 거짓이면 참이다

 

위의 연산자들이 if문의 조건으로 사용됨

또한, List 자료형에 해당 아이템이 있는지 조사하는 contains 메서드도 조건문에 활용

//"만약 노트북이 있으면 수업을 듣고, 없으면 놀자"
ArryayList<String> backpack = new ArrayList<String>();
backpack.add("ipad");
backpack.add("water");
backpack.add("orange");

if (backpack.contains("labtop")) {
	System.out.println("수업 듣자..");
}
else {
	System.out.println("자유!");
}

리스트 안에 labtop이란 요소가 없으므로 자유가 출력된다.

 

else if

→ 이전 조건문이 거짓일 때 수행

→ 개수제한 x

 

 

 

2-2. swtich / case

→ 입력 변수의 값과 일치하는 case 입력값이 있다면 해당 case 문에 속한 문장 실행

→ case 문마다 break 라는 문장이 있음, case 문을 실행한 뒤 switch 문을 나가기 위한 것

→ break 문이 없다면 다음 case 문에 속한 문장 실행

 

예시 보는 게 이해 더 빠를 듯

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);
    }
}

month 가 8이므로 August 출력 

1~12가 아닌 다른값 → default: 문장 수행 

 

입력값이 정형화

→ 가독성 if < switch/case

 

2-3. while

조건문이 참일 때 실행, 거짓일 때 종료

 

무한루프 → while 문으로 구현

조건문에 true 넣으면 항상 true 여서 무한으로 실행됨 

탈출구 : Ctrl + C

 

 

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;
    }
}

 money는 항상 0보다 커서 조건문은 항상 참

하지만 커피 양이 0이되면 break 호출 → while 문 탈출

 

continue 

→ 다시 조건문으로 돌아가기

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

a가 짝수면 if문의 조건문이 참이라 continue 실행, while 문의 맨 처음으로 돌아가게함 → System.out.println(a); 수행 x

 

 

2-4. for

→ for 문의 조건문은 세미콜론을 구분자로 세 부분으로 나눔

 

for (초기치; 조건문; 증가치;) 

예제

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

초기값 int i = 0

조건문 i < numbers.length (i가 numbers의 개수보다 작을 때) 이게 참이면 for문 실행

증가치 i++

 

continue 

for 문으로 돌아감

 

이중 for 문

ex)

for(int i=2; i<10; i++) {
    for(int j=1; j<10; j++) {
        System.out.print(i*j+" ");
    }
    System.out.println("");  // 줄을 바꾸어 출력하는 역할을 한다.
}
/*
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
.
.
.
구구단 출력
*/

 

System.out.print → 줄 안 바꿈

System.out.println → 줄 바꿈

 

 

2-5. for each

→ for 문 이용, 조건문의 문법이 다름

 

for (type 변수명 : iterate) {

   body-of-loop

}

 

iterate → 루프를 돌릴 객체, 한 개씩 순차적으로 변수명에 대입, for 문 수행

변수명의 자료형은 iterate 객체에 포함된 자료형과 일치

 

for문

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

 

 

for each 문

String[] numbers = {"one", "two", "three"};
for(String number: numbers) {
    System.out.println(number);
}

 

반복 횟수 명시적 x

한 단계씩 순차적으로 반복할 때만 사용

 

 

Quiz

3.5장

1. HashMap의 특징? → (c) null키를 허용

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

3. 다음 코드의 출력 결과는 무엇? → (b) 8

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

 

 

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

5. Set의 주요 특징 중 하나는 무엇? → (c) 중복 허용 x

6. 다음 코드의 출력 결과는 무엇? → (a) 1

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

 

 

7. Set에 요소를 추가할 때 사용하는 메서드? → (a) add()

8. Java 에서 자동 형 변환이 이루어지는 경우? → (c) int 에서 double로 변환

9. 다음 코드의 출력결과? → (a) 9

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

 

 

10. 다음 중 final 키워드의 올바른 사용법이 아닌 것? → (a) 변수를 재할당

11. Java에서 기본형 타입을 참조형 타입으로 변환할 때 사용하는 클래스? → (a) Wrapper 

12. 다음 코드의 출력 결과? → (c) Error

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

→ 교집합, 합집합, 차집합을 구할 때 유용, 자료형의 중복을 제거하기 위한 필터 역할

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

→ 형 변환이란 자료형을 다른 자료형으로 바꾸는 것, 수동 형 변환은 자동 형 변환과 다르게 프로그래머가 명시적으로 지정

15. Java의 final 키워드에 대해 설명, final 변수를 사용할 때의 장점을 서술

→ final은 자료형에 값을 한번만 설정할 수 있게 강제하는 키워드, 값이 바뀌면 안 될 때 사용

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

→ 해당 객체가 변환하려는 타입으로 캐스팅 할 수 없을 경우 ClassCastException 발생, 주로 객체 형 변환시 발생

 

 

4장

1. 다음 코드의 출력결과? a. 

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

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

4. 다음 if-else if-else 구조에서 result의 값은? b.

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

6. 다음 코드의 출력 결과? c.

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

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

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

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

11. 다음 코드의 출력 결과는? a.

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

13. 다음 코드의 출력 결과는? a.

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

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

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

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

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

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

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

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

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

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

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

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

 

코딩테스트

아직 저한테는 많이 어려워서 풀 때까지 시간이 좀 걸리는 것같아요 최대한 빨리 풀어서 글 수정하겠습니다 죄송합니다..

3.5장

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/81301

반응형