Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java
- springboot
- service
- 네티 서버
- 네티 클라이언트
- 배열
- 백엔드 설정
- toyproject
- 클래스
- Repository
- axios
- 채팅
- JWT
- 스프링부트
- Security
- recoil
- controller
- Spring
- Spring Boot
- 자바
- MySQL
- 기초설정
- react
- Kotlin
- netty
- 팀프로젝트
- 자료형
- 프로젝트
- 코틀린
- 도커
Archives
- Today
- Total
hyuko
제네릭, 컬렉션 본문
728x90
반응형
제네릭
형태 : <T>
- 제네릭은 wrapper class 자료형만 사용가능하다.
- 자료형을 바꿀 때 쓴다.
- 생성될 때 꺽쇠에 들어가있는 타입으로 생성을 하겠다라는 의미이다.
- 항상 객체는 생성이 될 때 기준으로 봐야한다.
와일드 카드
< ? > : 와일드카드 어떠한 자료형이 들어올지 모른다 , 어떤자료형이든 가능하다
여러가지 자료형을 받아야하고 어떤자료형이 들어올지 모를 때 쓰인다.
유연하게 객체를 쓰고 싶을 때
와일드 카드를 쓴 것과 Object 로 제네릭안에 쓴 것과 동일하나
잘 쓰지 않는다.
와일드 카드 제약조건
? extends 자료형 (대상 객체 하위)
뒤에 있는 자료형을 상속받거나 자료형 자체가 아니면 리턴이 되지않는다.
? super 자료형 (대상 객체 상위)
자료형을 기준으로 자료형 자체와 상위객체만 리턴이 가능하다.
제네릭 예시코드
public class TestData<T, E> {
private T data1;
// 래퍼클래스 자료형 Wrapper Class
private E data2;
public TestData(T data1, E data2){
this.data1 = data1;
this.data2 = data2;
}
@Override
public String toString() {
return "TestData{" +
"data1='" + data1 + '\'' +
", data2=" + data2 +
'}';
}
}
===========================================
public class Main {
public static void main(String[] args) {
TestData<String, Integer> td = new TestData<String, Integer>("홍길동", 100);
TestData<String, Double> td2 = new TestData<String, Double>( "홍길동", 100.07);
System.out.println(td);
System.out.println(td2);
}
}
- 실행시 콘솔화면
collection 프레임워크
다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
Map<K, V>
Iterable<E> <- Collection<E> <- List<E>
<- Set<E>
List
- List: 순서가 있고 중복이 가능하다
순서가 있기 때문에 명확하게 순서에 맞는 값이 있어서 구분이 가능해서
중복이 가능하다
public class ArrayListMain {
public static void main(String[] args) {
List<String> strList = new ArrayList<String>();
// 값 추가
strList.add("java");
strList.add("python");
System.out.println(strList);
// 값 원하는 위치에 추가
strList.add(1, "android");
System.out.println(strList);
// 해당 인덱스의 값을 추출
System.out.println(strList.get(0));
String strLang = strList.get(1);
System.out.println(strLang);
// 리스트에 해당 값이 있는지 확인 (T, F)
System.out.println(strList.contains("C++"));
System.out.println(strList.contains("android"));
// 값 수정
strList.set(2, "javascript");
System.out.println(strList);
// 값 삭제
strList.remove("android");
System.out.println(strList);
strList.remove(1);
System.out.println(strList);
// 리스트의 크기 확인
System.out.println(strList.size());
// 리스트가 비었는지 확인
System.out.println(strList.isEmpty());
// 리스트 초기화
strList.clear();
System.out.println(strList.isEmpty());
/*
* 배열을 List로 변환
* Arrays.asList(배열);
*
*/
String[] langs = {"java", "python", "C++", "javascript"};
List<String> tempList = Arrays.asList(langs);
strList.addAll(tempList);
strList.addAll(2, tempList);
// 해당 값의 위치 (index) 왼쪽부터 찾기
int findIndexLeft = strList.indexOf("java");
System.out.println(findIndexLeft);
// 해당 값의 위치 (index) 오른쪽 부터 찾기
int findIndexRight = strList.lastIndexOf("java");
System.out.println(findIndexRight);
//////////////////////////////////////
strList.set(1, "java");
System.out.println(strList);
strList.subList(strList.indexOf("java") + 1, strList.size()).indexOf("java");
//////////////////////////////////////
// 시작인덱스 부터 뒤의 인덱스 전까지 1, 2, 3 인덱스의 값을 뽑아 낸다.(리스트로)
List<String> subList = strList.subList(1, 4);
System.out.println(subList);
// ==============<< 반복 >> ==================
// 일반 반복문
for (int i = 0; i < strList.size(); i++) {
System.out.println("[" + i + "]: " + strList.get(i));
}
System.out.println();
// forEach
for (String str : strList) {
System.out.println("[값]: " + str);
}
System.out.println();
// 람다식 forEach
strList.forEach(str -> System.out.println("[값2]" + str));
System.out.println();
// 반복자
Iterator<String> iterator = strList.iterator();
while (iterator.hasNext()) {
String lang2 = iterator.next();
System.out.println("[값3]: " + lang2);
}
for (String lang2 : strList){
System.out.println("[값3]: " + lang2);
}
}
}
- 실행시 콘솔화면
728x90
반응형
'Java > Java 고급편' 카테고리의 다른 글
Json 과 builder 패턴 (0) | 2023.04.24 |
---|---|
컬렉션(Set, Map) (0) | 2023.04.24 |
static 과 singletone pattern (0) | 2023.04.24 |
Object (0) | 2023.04.24 |
상속과 추상 그리고 인터페이스 (0) | 2023.04.24 |