์ ๋ค๋ฆญ ํด๋์ค์ ์ธํฐํ์ด์ค ๊ธฐ๋ณธ ์ฌ์ฉ
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
๋ฐ์ํ
0