전에 Product배열을 사용했던 코드를 Vector클래스를 이용해서 바꾸면... 이렇게 됩니다.
Product배열 대신에 Vector를 생성하고... add메서드만 호출하도록 바꾸는 거죠.
책에 Vector클래스를 이용한 예제가 나와있고요...
그 중에서 구입한 제품의 목록을 출력해주는 summary메서드만 자세히 설명해 드리겠습니다.
변수 sum은 구입한 물건가격의 총합을 저장하기 위한 것이고요.
cartList는 구입한 제품의 목록을 저장할 문자열입니다.
isEmpty메서드는 Vector인스턴스인 cart에 저장된 객체가 있는지를 확인하는 것이죠.
반환값이 boolean이기 때문에 if문의 조건문으로 사용할 수 있습니다.
cart가 비어있으면... 바로 메서드의 수행을 종료하고요.
그렇지 않으면...
반복문을 이용해서 cart에 저장된 제품의 목록을 만들어서 화면에 출력합니다.
size메서드를 호출해서 Vector인스턴스 cart에 저장된 객체의 개수를 얻어내서...
그 개수만큼 반복하게 됩니다.
cart에 저장된 객체를 읽어오기 위해서 get메서드를 사용했는데요...
get메서드의 리턴타입이... Object이기 때문에... Product타입으로 형변환 해주어야 합니다.
원래는 형변환 하기전에 instanceof연산자를 이용해서 타입체크를 해야하지만...
여기서는 cart에 저장된 객체가 모두 Product클래스의 자손이기 때문에...
instanceof를 사용하지 않았습니다.
get메서드를 호출해서 얻은 결과가 Object타입의 참조이기 때문에... Product타입으로 형변환 해주어야만
Product클래스에 정의된 멤버변수 price에 접근할 수 있습니다.
만일 이처럼... Object타입의 참조변수로 price에 접근하려고 하면... 에러가 발생합니다.
전에 배운 것과 같이... 아무리 실제 인스턴스가 멤버변수 price를 가지고 있어도...
Object클래스에는 멤버변수 price가 정의되어 있지 않기 때문에... Object타입의 참조변수로는
price에 접근할 수 없는 것입니다.
문자열과 참조변수를 덧셈연산하면... 참조변수에 toString메서드가 호출되어 문자열을 얻어서 결합합니다.
그래서 빈문자열과 참조변수 p를 덧셈연산하면... 참조변수 p가 가리키는 객체의 toString메서드가 호출됩니다.
만일 참조변수 p가 가리키고 있는 객체가 Tv였다면... Tv클래스에 정의된 toString메서드가 호출되어서...
문자열 “Tv”를 얻습니다. 빈문자열과 문자열 “Tv”를 결합하면 그 결과는 문자열 “Tv”가 되겠죠.
이 예제를 이해하는데 별 어려움이 없었다면... 다형성을 잘 이해하고 계신겁니다.
다형성은 매우 중요하니까... 반복을 통해서 완전히 이해하도록 하세요.
'Backend > java' 카테고리의 다른 글
추상메서드란 무엇인가. (0) | 2018.08.12 |
---|---|
추상클래스란 무엇인가. (0) | 2018.08.12 |
여러 종류의 객체를 하나의 배열로 다루기2 ( Vector ) (0) | 2018.08.12 |
여러 종류의 객체를 하나의 배열로 다루기 (0) | 2018.08.12 |
매개변수의 다형성 (0) | 2018.08.12 |
#IT #먹방 #전자기기 #일상
#개발 #일상