TIL(20240520) JAVA: 제네릭
TIL(20240520) JAVA: 제네릭
📌 JAVA
💡 제네릭스(Generics)
- 컴파일시 타입을 체크해 주는 기능, 다양한 데이터 타입을 처리할 수 있도록 하는 기능
- 제네릭을 사용하면 타입 안정성과 코드 재사용성을 높일 수 있음-> 객체 타입의 안정성을 높이고, 형변환의 번거로움을 줄여줌
- 형변환 에러 : ClassCastException
💡 제네릭 타입과 다형성
- 참조변수와 생성자의 대입된 타입은 일치해야 한다.
1
2
ArrayList<Person> list = new ArrayList<Person>(); // 가능 대입된 타입 일치
ArrayList<Person> list = new ArrayList<Box>(); // error 대입된 타입 불일치
- 제네릭 클래스간의 다형성은 성립 (대입된 타입은 일치해야함)
1
2
List<Person> list = new ArrayList<Person>(); // 가능, 다형성 ArrayList가 List를 구현
List<Person> list = new LinkedList<Person>(); // 가능, 다형성 LinkedList가 List를 구현
- 매개변수의 다형성도 성립
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Product{}
class Tv extends Product{}
class Audio extends Product{}
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Product()); // 가능
list.add(new Tv()); // 가능
list.add(new Audio()); // 가능
printAll(list); // Product@3fee733d Tv@5acf9800 Audio@4617c264
public static void printAll(ArrayList<Product> list)
for(Product p : list) {
System.out.println(p);
}
1
2
3
4
5
6
7
8
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(12); // 오토박싱
list.add(13);
// list.add("14"); // error String 타입 불가
System.out.println(list); // [12, 13]
🎈 String 타입을 넣으려면?
1
2
3
4
5
6
7
8
ArrayList<Object> list = new ArrayList<Object>(); // Object타입으로 변환
list.add(12); // 오토박싱
list.add(13);
list.add("14");
String str = (String)list.get(2);
System.out.println(str); // 14
👀 예제 만들어서 이해하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Person {
private String name;
private int age;
public Person (String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "나의 이름은 "+name+ " 나이는 "+age+" 입니다";
}
}
class Main {
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<Person>();
Person person = new Person("hanni", 33);
list.add(person);
System.out.println(list.get(0));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Box<T> {
private T contents;
public void setContents(T contents) {
this.contents = contents;
}
public T getContents() {
return contents;
}
public void displayContents() {
System.out.println("contents :"+ contents);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString(){
return "사람의 이름은 : "+name+" 나이는 : "+age+" 입니다";
}
}
class Main {
public static void main(String[] args) {
// 정수형 box 생성
Box<Integer> integerBox = new Box();
integerBox.setContents(100);
integerBox.displayContents(); // contents :100
// 문자열형 box생성
Box<String> stringBox = new Box();
stringBox.setContents("apple");
stringBox.displayContents(); // contents :apple
// 사용자 정의 타입 Box 생성
Box<Person> person = new Box();
person.setContents(new Person("hanni", 33));
person.displayContents(); // contents :사람의 이름은 : hanni 나이는 : 33 입니다
}
}
📌 Spring
- gradle이란? 버전을 설정하고 라이브러리를 가져오는 것 !
📌 코딩테스트 : 서울에서 김서방 찾기
🔒 문제 : String형 배열 seoul의 element중 “Kim”의 위치 x를 찾아, “김서방은 x에 있다”는 String을 반환하는 함수, solution을 완성하세요. seoul에 “Kim”은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
🚫 조건 :
- seoul은 길이 1 이상, 1000 이하인 배열입니다.
- seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
- “Kim”은 반드시 seoul 안에 포함되어 있습니다.
💡 필요했던 메서드
- format() : 리턴되는 문자열의 형태를 지정하는 메소드
- equals() : 문자열 값 비교
🔓 문제풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public String solution(String[] seoul) {
String answer = "Kim";
int x = 0;
for(int i=0; i<seoul.length; i++) {
if (seoul[i].equals(answer)){
x = i;
}
}
return String.format("김서방은 %d에 있다", x);
}
}
🤷♀️ 코딩테스트 1 문제풀이를 하면서 느낀점
: 반환타입이 String인데 계속 index를 반환하려고 했던 나의 조급함.. 그리고 처음부터 indexOf를 배열에서 잘 활용하지 못해 아쉽다.. Arrays.asList()는 배열을 리스트형식으로 변환해준다는 것을 꼭 기억했다가 다음번에 비슷한 문제를 만나면 활용할 것 !
🎈 코딩테스트 1 다른사람의 풀이!
1
2
3
4
5
6
7
8
import java.util.Arrays;
public class FindKim {
public String findKim(String[] seoul){
//x에 김서방의 위치를 저장하세요.
int x = Arrays.asList(seoul).indexOf("Kim");
return "김서방은 "+ x + "에 있다";
}
}
- asList() : 배열을 - 리스트로 변환
- indexOf() : 해당 문자열 인덱스번호 찾기
This post is licensed under CC BY 4.0 by the author.