본문 바로가기
CLASS/JAVA

#20-2 / generic code 형태의 class

by hingu 2024. 6. 11.

generic code 형태의 class : T 파라미터 값을 이용한 자료형 class

java11번대 이상에서 사용( 8번대는 사용 불가 )

알아두면 좋다!~

 

⚡ T : type

T : type의 약어, 사실 아무거나 써도 되지만 통상적으로 T 사용
public class generic {
	public static void main(String[] args) { 
		gen<String> g = new gen<String>(); //무조건 문자로 던지라는 class
		g.test("test"); //test 출력
		
		gen<Integer> g2 = new gen<Integer>(); //무조건 숫자로 던지라는 class
		g2.test(100); //100 출력
	}
}

class gen<T> { //자료구조를 자유자재로 사용 가능
	T result;
	
	public void test(T rs) {
		this.result = rs;
		System.out.println(this.result);
	}
}


- 2개도 사용가능

package java_test_t;

import java.util.ArrayList;

public class generic {
	public static void main(String[] args) { 
		gen<String,String> g = new gen<String,String>(); //무조건 문자로 던지라는 class
		g.test("test"); //test 출력
		
		gen<Integer,String> g2 = new gen<>();//무조건 숫자로 던지라는 class, new~<> 비워도 됨
		g2.test(100); //100 출력
		
		gen<Integer,Integer> g3 = new gen<>();
		g3.nbtest(123); //123 출력
	}
}

class gen<T,Z> { //자료구조를 자유자재로 사용 가능
	//T result = 0; 이렇게는 사용 불가 
	T result;
	Z number;
	
	public void test(T rs) {
		this.result = rs;
		System.out.println(this.result);
	}
	
	public void nbtest(Z nb) {
		System.out.println(nb);
	}
}

 

⚡ java시험(6/10) 10번문제 generic으로 풀이

abstract 이용하여
[1.휴대폰 인증, 2.이메일 인증] 선택 : -> 사용자가 입력 ->
-> 선택후 해당 선택사항에 맞는 정보 입력 -> 인증번호 xxxx 발송완료! 출력 하는 문제
public class java10_t {

	public static void main(String[] args) {
		se<String> s = new se<String>(); //문자형 generic class 호출
		s.codes();
	}
}

class se<T> extends keycode<T>{
	public void codes() {
		System.out.println("[1.휴대폰인증 , 2.이메일 인증] : ");
		String menu = super.sc.nextLine();
		if(menu.equals("1")) {
			super.tel();
		}else if(menu.equals("2")) {
			super.email();
		}else {
			System.out.println("해당메뉴는 잘못 입력된 코드입니다.");
			this.codes(); //재귀 method - 재호출
		}
		super.sc.close();
	}
}


-- abstract java 별도 파일

package java_test_t;
//추상클래스 - 난수생성 및 보안코드 발송

import java.util.Scanner;

public abstract class keycode<T> { //generic
	T userinfo; //generic 변수
	Scanner sc = new Scanner(System.in);
	String rnd = ""; //인증번호 4자리 저장하는 변수
	String result = "";
	
	public void tel() { //휴대폰 인증
		System.out.println("휴대폰 번호를 입력하세요(숫자만) : ");
		this.userinfo = (T)this.sc.nextLine();
		this.result = this.rnd_key();
		System.out.println("인증번호" + this.result + "발송하였습니다!");
	}
	
	public void email() { //email 인증
		System.out.println("이메일을 입력하세요 : ");
		this.userinfo = (T)this.sc.nextLine();
		this.result = this.rnd_key();
		System.out.println("인증번호" + this.result + "발송하였습니다!");
	}
	
	public String rnd_key() { //난수4자리 생성
		int w=1;
		while(w<5) {
			int no = (int)Math.floor(Math.random()*10);
			this.rnd += no;
			
			w++;
		}
		
		return this.rnd;
	}
}