김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 객체지향프로그래밍
  • 프론트앤드
  • HTML공부
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 코딩공부 #자바공부
  • 자바공부
  • 코딩
  • 자바
  • 백앤드
  • httperror
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • web.xml수정
  • http에러메세지
  • 개발자
  • 풀스택
  • ErrorPage
  • 코딩공부

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Java/: 기본 익히기

[JAVA] #9-4 제네릭(Generic) 이해하기 2 - 제네릭

2022. 9. 16. 17:50

1. 제네릭 이해하기

 

 이제 본격적으로 제네릭을 이해해보자.

 우린 #9-3에서 알아보았던 컬렉션 프레임워크를 사용하여 다양한 자료형이 한데 뒤섞여있는 것을 보았다.

 

 그 때 모아둔 다양한 요소들 중에서 특정 자료형을 수집하려한다면?

 그럴 때 사용하는 것이 제네릭인 것이다.

 

 제네릭에서 사용하는 타입의 종류는 아래와 같다.

 이 외에 사용자가 지정해서 만드는 타입까지 여러가지 타입들이 더 있을 수 있지만 주로 사용되는건 아래의 종류들이다.

타입 설명
<T> Type(객체 생성 시 해당 타입으로 변환된다)
<E> Element
<K> Key
<V> Value
<N> Number
<?>
- 와일드 카드
타입 파라미터를 대치하는 것으로
모든 클래스나 인터페이스타입이 올 수 있다.
또는 <> 안에는 참조자료형이 올 수 있다 / String, Integer, Character 등등도 가능하다는 뜻이다.
기초자료형은 안된다(int, char, double 등등)

 

 

2. 제네릭 사용하기

 

1) 생성자 함수에 제네릭 사용해보기

 우선 예시 코드를 살펴봐보자.

 아래 코드는 컬렉션 프레임워크 생성자 함수에 제네릭을 사용하여 요소들의 자료형을 제한한 것이다.

// int형만 num 배열에 대입 가능하다
int[] num = new int[3];

// Vector<int> 기본자료형은 올 수 없다. 에러
Vector<String> vec = new Vector<>();
vec.add("개나리");
vec.add("무궁화");
vec.add(new String("무궁화"));
// vec.add(3);					에러
// vec.add(2.4);				에러
// vec.add(new Character('R'));	에러

for(int i=0; i<vec.size(); i++) {
    String str = vec.get(i);
    System.out.println(str);
}
///////////////////////////////////////////////////////////////////


ArrayList<Integer> list = new ArrayList<>();
list.add(3);
list.add(new Integer(5));
// list.add(2.4);			에러
// list.add("KOREA");		에러
////////////////////////////////////////////////////////////////////


HashSet<Double> set = new HashSet<>();
set.add(1.2);
set.add(new Double(3.5));
// set.add(7);				에러
// set.add("");				에러
////////////////////////////////////////////////////////////////////////


HashMap<String, Character> map = new HashMap<>();
map.put("one", 'R');
map.put("two", new Character('r'));
// map.put("", ""); 에러
System.out.println(map.get("one"));
System.out.println(map.get("two"));
///////////////////////////////////////////////////////////////////////

 

 

2) 제네릭에 클래스 넣어서 사용하기

제네릭에는 클래스도 넣어서 사용할 수 있다.

class Mountain {
	String name;// 산 이름
	int height;// 산 높이
	
	public Mountain () {}
	public Mountain(String name, int height) {
		this.name = name;
		this.height = height;
	} // end	
} // class end

...

Mountain m1=new Mountain("한라산", 1950);
Mountain m2=new Mountain("관악산", 1500);
Mountain m3=new Mountain("북한산", 1000);

ArrayList<Mountain> item = new ArrayList<>();
item.add(m1);
item.add(m2);
item.add(m3);

 

 이렇게 코드를 작성하면 ArrayList인 item에는 Mountain의 형식을 가진 m1, m2, m3만이 들어갈 수 있다.

 출력하는 코드는 아래와 같다.

for(int i=0; i<item.size(); i++) {
    Mountain m=item.get(i);
    System.out.println(m.name);
    System.out.println(m.height);
}

 

 여기서 item.get(i)를 출력하면 주소값만 나온다.

 item.get(i)는 각각의 name과 height값을 모두 갖고 있기 때문이다.

 그래서 이를 다시 한 번 Mountain에 담아 출력을 시켜주면 정상적으로 출력이 되는 것을 확인할 수 있다.

출력된 모습

저작자표시 비영리 동일조건 (새창열림)

'⁂ Java > : 기본 익히기' 카테고리의 다른 글

[JAVA] #9-6 File 클래스  (0) 2022.09.19
[JAVA] #9-5 스레드(Thread)  (0) 2022.09.19
[JAVA] #9-3 제네릭(Generic) 이해하기 1 - 컬렉션 프레임워크  (0) 2022.09.16
[JAVA] #9-2 예외처리(Exception) 2 - throws  (0) 2022.09.16
[JAVA] #9-1 예외처리(Exception) 1 - try...catch...finally  (0) 2022.09.16
    '⁂ Java/: 기본 익히기' 카테고리의 다른 글
    • [JAVA] #9-6 File 클래스
    • [JAVA] #9-5 스레드(Thread)
    • [JAVA] #9-3 제네릭(Generic) 이해하기 1 - 컬렉션 프레임워크
    • [JAVA] #9-2 예외처리(Exception) 2 - throws
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바