프로그래머스 자바 중급 강의를 학습 목적으로 정리하여 포스팅합니다.
1. java.util 패키지
날짜와 관련된 Data, Calendar 클래스, 자료구조와 관련된 컬렉션 프레임워크 인터페이스와 클래스 등이 있다.
문서에서 deprecated가 보인다면 이는 더 이상 지원하지 않으니 사용하지 않는 것이 좋다는 의미이다.
Date 클래스는 지역화를 지원하지 않는다.
지역화란 국가별로 현재 날짜와 시간은 다른 것을 맞춰주는 것이다.
이런 문제를 해결하기 위하여 나온 클래스가 Calendar 클래스이며 자바 1.1에 등장한다.
지역화와 관련된 클래스들은 Locale로 시작되는 이름을 가진 클래스들이다.
2. 컬렉션 프레임워크
자료구조 클래스들을 컬렉션 프레임워크라고 한다.
Collection 인터페이스
- 컬렉션 프레임워크에서 가장 기본이 되는 인터페이스
- Collection 인터페이스는 여기에 자료가 있다라는 것을 표현한다.
- 중복도 허용하고, 자료가 저장된 순서도 기억하지 못한다.
- Collection의 대표적인 메소드는 add(), size(), iterator()이다.
add() : 컬렉션의 자료를 boolean 형태로 추가해준다
size() : 저장된 자료의 수를 int 형태로 반환해준다.
iterator() : 자료를 하나씩 꺼내기 위한 Iterator 인터페이스를 반환해준다.
- 저장된 순서를 기억하지 못하기 때문에 저장된 자료를 하나씩 꺼낼 수 있는 Iterator 라는 인터페이스를 반환한다.
hasNext() : 꺼낼 것이 있는 지 살펴본다.
next() : 하나씩 자료를 꺼낼 때 사용한다.
Set 자료구조
- 중복을 허용하지 않는 자료구조를 표현하는 인터페이스
- Collection 인터페이스를 상속받는다.
- Set 인터페이스가 가지고 있는 add 메소드는 같은 자료가 있으면 false, 없으면 true를 반환한다.
List 자료구조
- 중복은 허용하면서 순서를 기억하는 자료구조
- Collection 인터페이스를 상속받는다.
- 순서를 기억하고 있기 때문에 get(int형 인덱스) 메소드를 가지고 있다.
Map 자료구조
- Key와 Value를 가지는 자료구조이다.
- 저장할 때 put() 메소드를 이용하여 key와 value를 함께 저장한다.
- 원하는 값을 꺼낼 때는 key를 매개변수로 받아들이는 get() 메소드를 이용하여 값을 꺼낸다.
- Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안된다.
- Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key들에 대한 정보를 읽을 수 있는 Set을 반환하는 KeySet() 메소드를 가지고 있다.
3. Generic
Box 클래스
public class Box{
private Object obj;
public void setObj(Object obj){
this.obj = obj;
}
public Object getObj(){
return obj;
}
}
BoxExam 클래스
public class BoxExam{
public static void main(String[] args){
Box box = new Box();
box.setObj(new Object());
Object obj = box.getObj();
box.setObj("hello");
String str = (String)box.getObj();
System.out.println(str);
box.setObj(1);
int value = (int)box.getObj();
System.out.println(value);
}
}
- box는 object이기 때문에 내가 넣은 값의 형태인 string을 사용하고 싶다면 형변환을 해주어야 한다.
Java5에는 Generic이라는 문법이 사용됨으로써 인스턴스를 만들 때 사용하는 타입을 지정하는 문법이 추가됐다.
Box 클래스_Generic ver
public class Box<E>{
private E obj;
public void setObj(E obj){
this.obj = obj;
}
public E getObj(){
return obj;
}
}
- <E>가 제네릭을 적용한 것이다. Box는 가상의 클래스 E를 사용한다는 의미이다.
BoxExam 클래스_Generic ver
public class BoxExam{
public static void main(String[] args){
// Object를 사용하는 Box를 인스턴스로
Box<Object> box = new Box<>();
box.setObj(new Object());
Object obj = box.getObj();
// String을 사용하는 Box를 인스턴스로
Box<String> box2 = new Box<>();
box2.setObj("hello");
String str = box2.getObj();
System.out.println(str);
// Integer를 사용하는 Box를 인스턴스로
Box<Integer> box3 = new Box<>();
box3.setObj(1);
int value = (int)box3.getObj();
System.out.println(value);
}
}
Generic을 사용함으로써 선언할 때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있다. Generic을 사용하는 대표적인 클래스는 컬렉션 프레임워크와 관련된 클래스이다.
4. Set
set은 중복이 없고, 순서도 없는 자료구조이다.
한번 생성하면 크기 변경이 불가능하다.
Hashset과 TreeSet이 있다.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetExam{
public static void main(String[] args){
Set<String> set1 = new HashSet<>();
boolean flag1 = set1.add("kim");
boolean flag2 = set1.add("lee");
boolean flag3 = set1.add("kim");
//저장된 크기를 출력합니다.
// 3개를 저장하였지만, 중복값을 제외한 2개가 출력
System.out.println(set1.size());
System.out.println(flag1); //true
System.out.println(flag2); //true
System.out.println(flag3); //false
// set에 값을 하나씩 꺼내기 위해 Iterator 필요
Iterator<String> iter = set1.iterator();
while (iter.hasNext()) { // 꺼낼 것이 있다면 true 리턴.
// next()메소드는 하나를 꺼낸다
// 하나를 꺼내면 자동으로 다음것을 참조한다.
String str = iter.next();
System.out.println(str);
}
}
}
5. List
List는 데이터의 중복이 있을 수 있고, 순서도 있다.
저장공간이 필요에 따라 자유롭다.
import java.util.ArrayList;
import java.util.List;
public class ListExam {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// list에 3개의 문자열을 저장합니다.
list.add("kim");
list.add("lee");
list.add("kim");
System.out.println(list.size()); // 3
for(int i = 0; i < list.size(); i++){
String str = list.get(i);
System.out.println(str);
}
/* 출력 결과
kim
kang
kim
*/
}
}
6. Map
key와 value를 쌍으로 저장하는 자료구조
키는 중복될 수 없고, 값은 중복될 수 있다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapExam {
public static void main(String[] args) {
// Key, Value가 String 타입인 HashMap인스턴스
Map<String, String> map = new HashMap<>();
// put으로 값 저장
map.put("001", "kim");
map.put("002", "lee");
map.put("003", "choi");
// key는 중복값 X. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
map.put("001", "kang");
System.out.println(map.size()); // 3
System.out.println(map.get("001")); // kang
System.out.println(map.get("002")); // lee
System.out.println(map.get("003")); // choi
// map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
Set<String> keys = map.keySet();
// Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
Iterator<String> iter = keys.iterator();
while (iter.hasNext()) {
// key를 꺼냅니다.
String key = iter.next();
// key에 해당하는 value를 꺼냅니다.
String value = map.get(key);
// key와 value를 출력합니다.
System.out.println(key + " : " + value);
}
/* 출력 결과
001 : kang
002 : lee
003 : choi
*/
}
}
'JAVA > [프로그래머스] 자바 강의' 카테고리의 다른 글
[프로그래머스] 자바 중급 강의 part5. IO (0) | 2023.02.07 |
---|---|
[프로그래머스] 자바 중급 강의 part4. 날짜와 시간 (1) | 2023.02.01 |
[프로그래머스] 자바 중급 강의 part2. java.lang 패키지 (0) | 2023.01.30 |
[프로그래머스] 자바 중급 강의 part1. Object 클래스 (0) | 2023.01.29 |
[프로그래머스] 자바 입문 강의 part9. 예외처리 (0) | 2023.01.16 |