Wrapper Class
- java의 기본 자료형을 클래스화 하는 클래스
- byte..int...(기본 자료형)들을 value type으로 사용하지만 실질적으로 java는 value type이라는게 존재하지 않는다. (문제가 발생하는 이유)
- ex) Object type으로 만들면 뭐든 넣을 수 있지만 기본 자료형은 넣을 수 없음. (일반화 불가능)
* 알고리즘은 일반화를 시켜줘야됨. Object-> Generic을 만들어야 한다. - object class를 상속받는 어떤것에 넣어서 일반화를 시켜줄 수 있도록.
| Byte/Short/Charactor/Integer/Long/Float/Double/Boolean 따라서 위와 같이 Wrapper Class를 사용해주는 것이다. |
Wrapper Class를 사용할때는 아래 두가지를 생각하며 해야한다.
1. 기본자료형을 어떻게 wrapper로 바꿀지.
2. wrapper를 어떻게 기본자료형으로 바꿀지
기본적으로 아래와 같이 해줄 수 있는데 번거로움(C++의 변환생성자와 같이)
int x = 10;
new Integer(x);
지금은 이렇게 안하고 아래와 같이 해도 생성됨.
Integer i = 10;
내부적으로는 Integer i = new Integer(10);이렇게 동작되는 것임.
(서로 간의 변환을 생성자와 method를 사용하지 않고 가능)
3. 문자열과 wrapper의 변화
문자열은 생성자를 이용. wrapper type으로 바꾸기.
new Integer(10);
Integer.parseInt()를 사용하여 변환한다
⭐ wrapper type은 연산이 가능하다.
따라서, 바꿔야 하는 이유를 아는 것이 중요하다
⭐ java는 어떤 자료형이든 String으로 사용 가능하다. toString으로
-> 컴퓨터는 숫자를 모른다. 무조건 문자로 보여주고 입력받는다.
| 💡 int x = 10; 보다는 Integer x = 10; 으로 사용 하는것이 좋다. database같은 것들을 사용할 때 null의 개념이 값으로 들어올 수 있는데 int형은 null처리를 해주지 못한다. 또한 long을 사용하는 것을 연습하는 것이 좋다.(적극적으로 사용) |
| 💡 server program같은거 사용한다면 scan.close를 무조건 해줘야된다. 프로그램이 중단되면 상관없지만 계속 연결되고 실행되는 것들이 대부분이기 때문에 메모리 릭이 발생할 수 있다(메모리 누수) 서버에서는 굉장히 중요한 포인트임. |
java.util
Arrays
- 배열 관련 작업을 쉽게 할 수 있도록 도와주는 클래스
<배열에서 중요한것>
- 배열의 순회(순서대로 접근) map
- 정렬
- 검색 ( 정렬을 하면 검색이 빨라진다 )
- 복제
- 서버는 클라이언트에게 복제본을 준다. (원본을 바로 주지 않음)
복사본에 작업을 하면 저장을 눌러야 작업 완료가 되는 것이다. - undo 때문에 복제가 중요하다.
실제로 data를 불러오는 데 가장 오랜시간이 걸리기 떄문에(뭔가 잘못되었을때 다시 불러와야 됨.)
복제해서 하게되면 원본이 계속 있기 때문에 다시 복제 뜨면 된다.
- 서버는 클라이언트에게 복제본을 준다. (원본을 바로 주지 않음)
- 필터링 filtering
- 연산 reduce
- 동일한 형의 자료들의 묶음(비교가 가능하다)
sort
- 데이터를 순서대로 나열하는것.
<정렬을 구현하는 방법>
- 오름차순(ascending, 작은>큰거) 과 내림차순(descending, 큰거>작은)
- 알고리즘을 직접 사용(코딩 테스트에서 퀵 정렬은 필수, 설명까지 할 수 있어야 한다) 또는 API에서 제공하는 method 사용(각 요소가 크기 비교가 가능하도록 해줘야 한다)
❗ 선택정렬은 성능이 떨어지기 때문에 실무에서는 사용안한다. 선택 정렬은 for문 연습과 정렬을 설명하기 위해 해보는 것이다.
➰ 어떤것이든 String,int는 정렬이 되지만 내가 만든 객체는 어떤것을 기준으로 정렬을 해줘야 할지를 정해줘야 한다.
package cover;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
PersonVO[] persons = {
new PersonVO(1, "수지", 29),
new PersonVO(2, "아이유", 30),
new PersonVO(3, "카리나", 23),
new PersonVO(4, "아담", 46)
};
Arrays.sort(persons);
System.out.println(Arrays.toString(persons));
}
}
위와 같이 객체 배열을 sort시도하였을 때 에러가 난다.
💡 이유 : 객체 배열을 어떤 것을 기준으로 sorting해줘야 할지를 정해줘야 하기 때문이다. sort method는 자동으로 compareTo()를 호출하도록 구현되어있는데 Person객체 안에 compareTo()를 구현하여 어떤 정보를 기준으로 sorting할지 method를 만들어준다면 해결된다.
➰ 해결방법 1 : Person객체에 compareTo method override해주기
//매번 다르게 정렬은 불가능... 한가지로 지정한 정렬만 가능하다(이름/나이..등 중 한가지로만 정렬)
public int compareTo(PersonVO o) {
//크기 비교 방법 설정 1. 나이순
return o.age - this.age; //내림차순
return this.age - o.age; 오름차순
//크기 비교 방법 설정 2. 이름순
return this.name.compareTo(o.name); // 오름차순
return o.name.compareTo(this.name); //내림차순
}
또는 아래와 같이 main에서 지정하여 사용해 줄 수도 있다.
➰ 해결방법 2 : main method에서 sort 사용시 compare method를 넣어주기
Arrays.sort(persons, new Comparator<PersonVO>() {
@Override
public int compare(PersonVO o1, PersonVO o2) {
return o1.getNum() - o2.getNum();
}
});
➰ 동적으로 정렬하기 (input을 받아 선택한 방법으로 정렬해보았다)
package cover;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
PersonVO[] persons = {
new PersonVO(1, "수지", 29),
new PersonVO(2, "아이유", 30),
new PersonVO(3, "카리나", 23),
new PersonVO(4, "아담", 46)
};
/*
* 동적으로 정렬하기
* 1. 이름의 오름 2. 이름의 내림 3.나이의 오름 4. 나이의 내림
*/
Scanner scan = new Scanner(System.in);
System.out.println("<어떤 방식으로 정렬을 원하시나요?>");
System.out.println("1. 이름의 오름차순 2. 이름의 내림차순 3.나이의 오름차순 4. 나이의 내림차순");
System.out.print("input number > ");
String menu = scan.nextLine();
switch(menu.trim()) {
case "1":
Arrays.sort(persons, new Comparator<PersonVO>() {
public int compare(PersonVO o1, PersonVO o2) {
return o1.getName().compareTo(o2.getName());
}
});
break;
case "2":
Arrays.sort(persons, new Comparator<PersonVO>() {
public int compare(PersonVO o1, PersonVO o2) {
return o2.getName().compareTo(o1.getName());
}
});
break;
case "3":
Arrays.sort(persons, new Comparator<PersonVO>() {
public int compare(PersonVO o1, PersonVO o2) {
return o1.getAge() - o2.getAge();
}
});
break;
case "4":
Arrays.sort(persons, new Comparator<PersonVO>() {
public int compare(PersonVO o1, PersonVO o2) {
return o2.getAge() - o1.getAge();
}
});
break;
default:
System.out.println("메뉴는 1-4번만 선택하세요");
break;
}
scan.close();
System.out.println(Arrays.toString(persons));
}
}
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 21-2. API - java.util pkg (컬렉션 프레임워크) (0) | 2022.10.25 |
|---|---|
| [JAVA] 21-1. API - java.util pkg (Array, Date, Calendar, Random) (0) | 2022.10.25 |
| [JAVA] 19. API (Application Programming Interface) (0) | 2022.10.18 |
| [JAVA] 18. 예외처리문법 (try-catch 와 try-catch-finally / throws 와 throw keyword) (0) | 2022.10.17 |
| [JAVA] 17. 인터페이스(Interface) (0) | 2022.10.14 |