11
17

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ณธ ์‚ฌ์šฉ

class MyClass<T>{
	T val;
	void set(T a) {
		val = a;
	}
	T get(){
		return val;
	}
}

↑์ด๋Ÿฐ ์‹์˜ ๊ตฌ์กฐ

 

์œ„์˜ ๊ตฌ์กฐ์— ์ถ”๊ฐ€ํ•ด์„œ ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ƒ๋ฉด์€

//T ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค
class MyClass<T>{
	T val;
	void set(T a) {
		val = a;
	}
	T get(){
		return val;
	}
}
public class GenericClassEx {

	public static void main(String[] args) {
		//T๋ฅผ ๊ตฌ์ฒดํ™”
		MyClass<String> my1 = new MyClass<String>();	//์ด ์‹œ์ ์—์„œ T๊ฐ€ String์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฑฐ์ž„
		MyClass<Integer> my2 = new MyClass<Integer>();	//์—ฌ๊ธฐ์„œ๋Š” Integer์œผ๋กœ ์‚ฌ์šฉ๋จ
		
		my1.set("Java");
		System.out.println(my1.get());
		
		my2.set(33);
		System.out.println(my2.get());
	}

}

์‹คํ–‰ ๊ฒฐ๊ณผ

 

์ œ์•ฝ ์กฐ๊ฑด

์ œ๋„ค๋ฆญ์œผ๋กœ๋Š” ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ ๋ถˆ๊ฐ€

 

์‘์šฉ๋ฒ• - ์ œ๋„ค๋ฆญ ์Šคํƒ ๋งŒ๋“ค๊ธฐ

์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์•„๋ž˜๋Š” ๋ง‰ํžˆ๊ณ  ์œ„์—์„œ ๋„ฃ์—ˆ๋‹ค ๊บผ๋ƒˆ๋‹ค ์“ฐ๋Š” ๋ฐฉ์‹์˜ ์Šคํƒ.

//T๋ฅผ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ œ๋„ค๋ฆญ ์Šคํƒ
class GStack<T>{
	int top;
	Object[] stack;
	GStack(){
		top = 0;
		stack = new Object[10];	// new T[10]์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ! T๊ฐ€ ๋ญ”์ง€ ๋ชฐ๋ผ์„œ ๋ฏธ๋ฆฌ ๋ฐฐ์ •ํ•ด์ค„ ์ˆ˜ ์—†์Œ.
	}
	void push(T item) {
		if(top == 10) {	//์Šคํƒ์˜ 10 ์ œํ•œ์ด ๊ฑธ๋ ธ์„ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฌธ๊ณผ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜
			System.out.println("Stack Overflow!!!");
			return;
		}
		stack[top++] = item;	//๊ฐ’์„ ๋„ฃ๊ณ  top ์ˆซ์ž๋ฅผ 1 ์˜ฌ๋ฆผ
	}
	T pop() {
		T item;
		if(top == 0) {	//๋ฐ˜๋Œ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์—…์„ ๊ฒฝ์šฐ
			System.out.println("Stack Underflow!!!");
			return null;
		}
		item = (T)stack[--top];
		
		return item;
	}
}

public class GStackEx {

	public static void main(String[] args) {
		GStack<String> strStack = new GStack<String>();
		String[] names = {"Python", "Database", "Network", "Java"};
		for(String s : names)
			strStack.push(s);
		for(int i=0; i<names.length; i++)
			System.out.println(strStack.pop());
		
		GStack<Integer> intStack = new GStack<Integer>();
		int[] nums = {1, 2, 3, 4};
		for(int n : nums)
			intStack.push(n);
		for(int i=0; i<nums.length; i++)
			System.out.println(intStack.pop());
	}

}

์‹คํ–‰ ๊ฒฐ๊ณผ

 

์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ

๊ธฐ๋ณธ ์›๋ฆฌ๋Š” ๋™์ผ. ๋ž˜ํผ๋Ÿฐ์Šค๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์€ ๊ทธ์ € ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋ฟ์ž„์œผ๋กœ ๋ฐฐ์—ด์„ ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค.

 

์œ„์˜ ์†Œ์Šค์ฝ”๋“œ์— ์ด์–ด์„œ ์ž‘์„ฑ.

//T๋ฅผ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ œ๋„ค๋ฆญ ์Šคํƒ
class GStack<T>{
	int top;
	Object[] stack;
	GStack(){
		top = 0;
		stack = new Object[10];	// new T[10]์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ! T๊ฐ€ ๋ญ”์ง€ ๋ชฐ๋ผ์„œ ๋ฏธ๋ฆฌ ๋ฐฐ์ •ํ•ด์ค„ ์ˆ˜ ์—†์Œ.
	}
	void push(T item) {
		if(top == 10) {	//์Šคํƒ์˜ 10 ์ œํ•œ์ด ๊ฑธ๋ ธ์„ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฌธ๊ณผ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜
			System.out.println("Stack Overflow!!!");
			return;
		}
		stack[top++] = item;	//๊ฐ’์„ ๋„ฃ๊ณ  top ์ˆซ์ž๋ฅผ 1 ์˜ฌ๋ฆผ
	}
	T pop() {
		T item;
		if(top == 0) {	//๋ฐ˜๋Œ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์—…์„ ๊ฒฝ์šฐ
			System.out.println("Stack Underflow!!!");
			return null;
		}
		item = (T)stack[--top];
		
		return item;
	}
}

public class GStackEx {
	static <T> void toStack(T []arr, GStack<T> gs) {
		for(int i=0; i<arr.length; i++)
			gs.push(arr[i]);
	}
	
	static <T> void printStack(GStack<T> gs) {
		while(gs.top != 0)
			System.out.print(gs.pop()+" ");
		System.out.println();
	}
		
	public static void main(String[] args) {
		GStack<String> strStack = new GStack<String>();
		String[] names = {"Python", "Database", "Network", "Java"};
		toStack(names, strStack);
		//for(String s : names)
		//	strStack.push(s);
		printStack(strStack);
		//for(int i=0; i<names.length; i++)
		//	System.out.println(strStack.pop());
		
		GStack<Integer> intStack = new GStack<Integer>();
		Integer[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
		toStack(nums, intStack);	//ํƒ€์ž…์„ Integer๋กœ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค. ์ž๋ฃŒ 1๊ฐœ์ผ ๋•Œ๋Š” ์ž๋™ ๋ฐ•์‹ฑ์ด ๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ™์€ ๊ฒฝ์šฐ ์•ˆ ๋จ.
		//for(int n : nums)
		//	intStack.push(n);
		printStack(intStack);
		//for(int i=0; i<nums.length; i++)
		//	System.out.println(intStack.pop());	
	}
}

์‹คํ–‰ ๊ฒฐ๊ณผ

 

+์ถ”๊ฐ€ ์Šคํƒ์„ ๋ฐ˜๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ.

//T๋ฅผ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ œ๋„ค๋ฆญ ์Šคํƒ
class GStack<T>{
	int top;
	Object[] stack;
	GStack(){
		top = 0;
		stack = new Object[10];	// new T[10]์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ! T๊ฐ€ ๋ญ”์ง€ ๋ชฐ๋ผ์„œ ๋ฏธ๋ฆฌ ๋ฐฐ์ •ํ•ด์ค„ ์ˆ˜ ์—†์Œ.
	}
	void push(T item) {
		if(top == 10) {	//์Šคํƒ์˜ 10 ์ œํ•œ์ด ๊ฑธ๋ ธ์„ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฌธ๊ณผ ๊ทธ๋ƒฅ ๋ฐ˜ํ™˜
			System.out.println("Stack Overflow!!!");
			return;
		}
		stack[top++] = item;	//๊ฐ’์„ ๋„ฃ๊ณ  top ์ˆซ์ž๋ฅผ 1 ์˜ฌ๋ฆผ
	}
	T pop() {
		T item;
		if(top == 0) {	//๋ฐ˜๋Œ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์—…์„ ๊ฒฝ์šฐ
			System.out.println("Stack Underflow!!!");
			return null;
		}
		item = (T)stack[--top];
		
		return item;
	}
}

public class GStackEx {
	static <T> void toStack(T []arr, GStack<T> gs) {
		for(int i=0; i<arr.length; i++)
			gs.push(arr[i]);
	}
	
	static <T> void printStack(GStack<T> gs) {
		while(gs.top != 0)
			System.out.print(gs.pop()+" ");
		System.out.println();
	}
	
	static <T> GStack<T> reverse(GStack<T> gs){
		GStack<T> revStack = new GStack<T>();
		while(gs.top != 0)
			revStack.push(gs.pop());
		return revStack;
	}
		
	public static void main(String[] args) {
		GStack<String> strStack = new GStack<String>();
		String[] names = {"Python", "Database", "Network", "Java"};
		toStack(names, strStack);
		//for(String s : names)
		//	strStack.push(s);
		
		strStack = reverse(strStack);
		
		printStack(strStack);
		//for(int i=0; i<names.length; i++)
		//	System.out.println(strStack.pop());
		
		GStack<Integer> intStack = new GStack<Integer>();
		Integer[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
		toStack(nums, intStack);	//ํƒ€์ž…์„ Integer๋กœ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค. ์ž๋ฃŒ 1๊ฐœ์ผ ๋•Œ๋Š” ์ž๋™ ๋ฐ•์‹ฑ์ด ๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ™์€ ๊ฒฝ์šฐ ์•ˆ ๋จ.
		//for(int n : nums)
		//	intStack.push(n);
		printStack(intStack);
		//for(int i=0; i<nums.length; i++)
		//	System.out.println(intStack.pop());
	}

}

์‹คํ–‰ ๊ฒฐ๊ณผ

728x90
๋ฐ˜์‘ํ˜•
COMMENT