[질문] 인터페이스 사용 관련 질문
달님
인터페이스와 관련된 질문입니다.
스택관련 소스인데
제가 궁금한것은
인터페이스로 선언한 StackItem 을
Stack 클래스에서
StackItem top:
선언해서 사용하는데
흐름이 어떻게 되는지 궁금합니다.
인터페이스는 상속만 해서 사용하는 줄 알았는데...ㅡㅜ;;
무슨 뜻인지 설명해주시면 감사하겠습니다
interface StackItem
{
public StackItem getNextItem();
public void setNextItem(StackItem item);
}class Stack
{
StackItem top;
public Stack()
{
top = null;
}
public void push(StackItem item)
{
if (top == null)
{
top = item;
}
else
{
item.setNextItem(top);
top = item;
}
}
public StackItem pop()
{
if(top == null)
{
System.out.println(stack is empty);
java.lang.System.exit(-1);
}
StackItem topItem = top;
top = top.getNextItem();
return topItem;
}
public void printAll()
{
System.out.print(This stack has : );
StackItem item = top;
while(item != null)
{
System.out.print(item);
item = item.getNextItem();
}
System.out.println();
}
}
class IntItem implements StackItem
{
int i;
StackItem next;
public IntItem(int i)
{
this.i = i;
next = null;
}
public StackItem getNextItem()
{
return next;
}
public void setNextItem(StackItem item)
{
next = item;
}
public String toString()
{
return i+;
}
}
class StringItem implements StackItem
{
String s;
StackItem next;
public StringItem(String s)
{
this.s = s;
next = null;
}
public StackItem getNextItem()
{
return next;
}
public void setNextItem(StackItem item)
{
next = item;
}
public String toString()
{
return s;
}
}
class ComplexNumberItem implements StackItem
{
double real;
double imaginary;
StackItem next;
public ComplexNumberItem(double r, double i)
{
real = r;
imaginary = i;
next = null;
}
public StackItem getNextItem()
{
return next;
}
public void setNextItem(StackItem item)
{
next = item;
}
public String toString()
{
return real+++imaginary+i;
}
}
public class StackTest
{
public static void main(String[] args)
{
Stack aStack = new Stack();
aStack.push(new IntItem(10));
aStack.push(new StringItem(Kim));
aStack.push(new ComplexNumberItem(1, 5));
aStack.push(new ComplexNumberItem(2, 4));
aStack.push(new StringItem(lee));
aStack.push(new IntItem(9));
System.out.println(Item removed : + aStack.pop());
System.out.println(Item removed : + aStack.pop());
System.out.println(Item removed : + aStack.pop());
aStack.printAll();
}
}
-
소리
답변 감사합니다. ^^
패턴책을 읽어봐야겠네요 -
빛글
위 코드에서 인터페이스의 역할은 서로 다른 타입의 객체라도 서로 공통기능이 있을때 그 기능에 대한 접근을 단일화된 방법(인터페이스)으로 하자는 것입니다. 비유를 하자면 생산회사가 틀린 서로다른 TV를 하나의 리모콘으로 둘다 제어 할수 있다는.. TV에 공통기능 전원, 채널, 음략설정같은 것을 리모콘 하나로.. - 대략 이런 개념입니다. 리모콘이 인터페이스 역할을 하지요.. 즉, item에 인터페이스로 상속된 메소드에 대해서 하나의 인터페이스의 참조변수로