[Java 자료구조] 제네릭 프로그래밍

2022. 2. 7. 18:32·Java & Kotlin
목차
  1. 제네릭 프로그래밍
  2. 예제 코드

제네릭 프로그래밍

  • 클래스에서 사용되는 변수의 자료형이 여러 개 일 수 있고, 그 기능(메서드)는 동일할 때 자료형을 특정짓지 않고 클래스를 사용할 때 자료형을 지정하도록 선언하는 것
  • 자료형의 변환이 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식이다.
  • 컬렉션 프레임워크에서 많이 사용되고 있다.
  • 변수의 자료형이 여러 개인 경우 제네릭 타입을 사용하지 않으면 그에 따라 클래스도 여러개 생성해야 하므로 오버헤드가 발생한다.

 

예제 코드

재료를 매개변수로 받는 3D 프린터 구현해보기

 

제네릭 프로그래밍으로 구현하지 않을때

 

Powder.java
public class Powder {
	
	public String toString() {
		return "재료는 Powder입니다";
	}
}

 

ThreeDPrinter.java

여러 자료형을 수용할 수 있는 Object로 자료형을 선언하여 사용할 수 있다

public class ThreeDPrinter {
	
	private Object material;

	public Object getMaterial() {
		return material;
	}

	public void setMaterial(Object material) {
		this.material = material;
	}
	
}

 

ThreeDPrinterTest.java

Object 자료형으로 선언하면 사용시 형변환을 해주어야 하므로 번거로움 => 제네릭 프로그래밍 방식

public class ThreeDPrinterTest {

	public static void main(String[] args) {
		
		Powder powder = new Powder();
		ThreeDPrinter printer = new ThreeDPrinter();
		
		printer.setMaterial(powder);
		Powder p = (Powder)printer.getMaterial();	// 형변환 해주어야 함
	}

}

 

 

제네릭 프로그래밍 방식을 사용할 때

  • 자료형 매개변수 T (Type parameter) : 클래스를 사용하는 시점에 실제 사용할 자료형을 지정한다. static 변수는 사용할 수 없음
  • E : element, K : key, V : value 등 모든 알파벳을 사용할 수 있지만 되도록 의미있는 알파벳을 쓰는 것이 좋다.

 

GenericPrinter.java
  • 클래스 이름 옆에 <T>로 제네릭 클래스임을 명시한다.
  • 자료형이 들어갈 자리에 T를 넣어준다.
package ch06;

public class GenericPrinter<T> {	// 제네릭 클래스
	
	private T material;	// T 자료형 변수

	public T getMaterial() {	// T 자료형을 반환하는 제네릭 메서드
		return material;
	}

	public void setMaterial(T material) {
		this.material = material;
	}
	
	public String toString() {
		return material.toString();
	}

}

 

GenericPrinterTest.java
  • 다이아몬드 연산자<> 안에 아무것도 적어주지 않으면 자료형의 default는 Object이다.
  • new GenericPrinter<>()에서 <>안에 아무것도 적어주지 않으면 컴파일러가 Powder로 추론할 수 있다.
package ch06;

public class ThreeDPrinterTest {

	public static void main(String[] args) {
		
		GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();	// T를 Powder로 설정
		powderPrinter.setMaterial(new Powder());
		System.out.println(powderPrinter);
		
		GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<>();	// T를 Plastic으로 설정
		plasticPrinter.setMaterial(new Plastic());
		System.out.println(plasticPrinter);
		
	}

}

 

수행 결과
재료는 Powder입니다
재료는 Plastic입니다
저작자표시 비영리 변경금지 (새창열림)

'Java & Kotlin' 카테고리의 다른 글

[Java 자료구조] 제네릭 프로그래밍에서의 자료형 제한  (0) 2022.02.07
[Java 자료구조] 큐 구현해보기  (0) 2022.02.07
[Java 자료구조] 스택 구현해보기  (0) 2022.02.07
  1. 제네릭 프로그래밍
  2. 예제 코드
'Java & Kotlin' 카테고리의 다른 글
  • [Java 자료구조] 제네릭 메서드 활용
  • [Java 자료구조] 제네릭 프로그래밍에서의 자료형 제한
  • [Java 자료구조] 큐 구현해보기
  • [Java 자료구조] 스택 구현해보기
Sue
Sue
개발 공부 로그
Sue's devlog개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Java 자료구조] 제네릭 프로그래밍

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.