웹 개발 기초/자바 문법 7

다운캐스팅, instanceof

이전 글들을 통하여 다형성을 활용하여 업캐스팅(up casting)이 된다는 것을 알게 되었다. 여기에서는 다시 하위 클래스로 형 변환(다운캐스팅)이 되는 과정을 살펴보자. 위와 같은 계층 구조에서 상위 클래스를 자료형으로 선언하는 Animal ani = new Human( ); 코드를 쓸 수 있다. 이때 생성된 인스턴스 Human은 Animal형이다. 이렇게 Animal 형으로 형 변환이 이루어졌을 때는 Animal 클래스에서 선언한 메서드와 멤버 변수만 사용할 수 있다. 다시말해 Human 클래스에 더 많은 메서드가 구현되어 있고 다양한 멤버 변수가 있다고 하더라도 자료형이 Animal형인 상태에서는 사용할 수 없는 것이다. 따라서 필요에 따라 다시 원래 인스턴스의 자료형(여기에서는 Human형)으로..

다형성 활용, 상속을 사용하는 경우, IS-A 관계, HAS-A 관계

다형성을 활용하여 프로그램을 작성하게 되면 유지보수할 때 매우 편리하다는 이점이 있다. 배열을 사용하여 여러 하위 클래스 자료형을 상위 클래스 자료형으로 한꺼번에 관리할 수도 있다. 객체 배열 ArrayList 자료형을 지정하여 선언하고, Customer과 GoldCustomer과 VIPCustomer 클래스 모두 상위 클래스인 Customer 자료형으로 지정하고 선언하게 되면 이 배열에는 Customer, GoldCustomer, VIPCustomer를 모두 사용할 수 있다. 그리고 이 배열에 Customer 하위 클래스의 인스턴스가 추가될 때 모두 Customer 형으로 묵시적 형변환이 된다. 그러면 테스트 프로그램을 구현해보자. Customer 클래스와 VIPCustomer 클래스는 전부 이전 예제..

가상메서드

자바의 클래스는 멤버 변수와 메서드로 이루어져 있다. 클래스를 생성해서 인스턴스가 만들어지면 멤버 변수는 힙 메모리에 위치한다. 그렇다면 메서드는 어디에 위치할까? 변수가 사용하는 메모리와 메서드가 사용하는 메모리는 다르다. 변수는 인스턴스가 생성될 때마다 새로 생성된다. 하지만 메서드는 실행해야 할 명령 집합이기 때문에 인스턴스가 달라도 같은 로직을 수행한다. 즉 같은 객체의 인스턴스를 여러 개 생성한다고 해서 메서드도 여러 개 생성되지 않는다. 예를 들면 다음 코드의 실행 결과와 같다. public class TestA { int num; void aaa( ) { System.out.println("aaa( ) 출력"); } public static void main(String[] args) { T..

메서드 오버라이딩, 메서드 오버로딩, 가상 메서드의 원리

메서드 오버라이딩은 어떨때 사용할까? -> 메서드 오버라이딩은 상위 클래스에서 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우 하위 클래스에서 재정의할 때 사용한다. 오버라이딩을 하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다. 그렇지 않으면 자바 컴파일러는 재정의한 메서드를 기존 메서드와 다른 메서드로 인식한다. 먼저 Customer 클래스에 calcPrice( ) 메서드가 다음과 같이 존재한다. 해당 메서드는 일반 회원의 가격을 계산하는 메서드이다. public class Customer { ... public int calcPrice(int price) { bonusPoint += price * bonusRatio; return price; } ....

상속에서의 클래스 생성

자바에서 하위 클래스가 생성될 때는 상위 클래스의 생성자가 먼저 호출된다. 상속 관계에서 클래스의 생성 과정을 살펴보면 하위 클래스에서 상위 클래스의 변수와 메서드의 사용이 가능한 이유와 하위 클래스에서 상위 클래스의 자료형으로 형 변환을 할 수 있는 이유를 이해할 수 있다. 상위클래스가 Customer( ) 이고, Customer( )의 하위 클래스가 VIPCustomer( )일 때, 클래스가 생성되는 과정을 살펴보면 다음과 같다. // Customer 클래스 생성 public class Customer { protected int customerID; protected String customerName; protected String customerGrade; int bonusPoint; doubl..