저번주에 실수로 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
https://school.programmers.co.kr/learn/courses/30/lessons/81301
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] 김재승 #2주차 (0) | 2024.10.17 |
---|---|
[2024-2 Java 스터디] 강보경 #2주차 (5) | 2024.10.16 |
[2024-2 Java 스터디] 이민형 #2주차 (3~4장) (1) | 2024.10.16 |
[2024-2 Java 스터디] 김민서 #2주차 (0) | 2024.10.16 |
[2024-2 Java 스터디] 이가인 #2주차 (2) | 2024.10.16 |