Programming/JAVA (139) 썸네일형 리스트형 상속(12) - 추상 클래스 1 추상 클래스는 이름만 보았을 때는 상속과 관계가 없어 보이지만, 사실 추상 클래스는 부모-자식 클래스의 사용의 응용된 버전입니다. 그래서 기본적인 클래스 상속 관계에 대한 이해도 뒷받침되어야 공부하기 편하니, 염두에 두시기 바랍니다. 일단, 개념부터 잡아보겠습니다. 여기서 말하는 '추상(abstract)'의 개념은 "어떤 실체가 있는 존재에서 공통되는 특성을 추출한 것"을 의미합니다. 뜬구름 잡는 소리 같다고요? 전혀 아닙니다. '공통되는 특성'을 뽑아서 만든 것이 추상 클래스의 핵심입니다. 그럼, 어떤 것들의 '공통되는 특성'을 뽑는 것일까요? 바로 [실체가 있는 클래스]의 공통된 특성을 뽑아서 모으는 것입니다. 여기에 상속의 개념을 덧붙여 보겠습니다. 등장인물은 '추상 클래스'와 '실체 클래스'입니다.. 상속(11) - 객체의 타입 확인(instanceof) 우리는 앞선 아티클에서, 다소 머리는 아팠지만 자식 클래스 타입의 객체를 부모 클래스 타입 객체로 강제 타입 변환을 진행하는 과정을 살펴보았습니다. 여기서, 당연한 이야기를 하나 하자면 "순수 부모 클래스 타입의 객체"는 자식 클래스 타입의 객체로 강제 타입 변환이 불가능합니다. 아래와 같은 경우를 의미하죠. Parent parent = new Parent(); Child child = (Child) parent; // 불가능 반복되는 얘기지만, 부모 클래스의 경우에는 자식 클래스 고유의 속성들을 갖고 있지 않기 때문에 이런 변환은 불가능합니다. 자, 그럼 어떤 코드를 설계하는 과정에서, "부모 클래스 타입의 변수"가 있다고 가정하고 이를 캐스팅(casting)할 때 우리는 한 가지를 주의해야 합니다. .. 상속(10) - 강제 타입 변환(Casting) 우리가 앞선 과정에서 부모 클래스를 상속받는 자식 클래스와 관련하여, [자동 타입 변환]에 대해서 학습했습니다. 요약하면, 주요 원칙은 '자식 클래스는 부모 클래스 타입으로 사용될 수 있다'였죠? 이는 필드에서 인스턴스로 사용될 때 혹은 파라미터 일 경우에도 적용하였습니다. 다시 한번 노파심에 짚고 넘어가자면, 자식 클래스는 기본적으로 부모 클래스의 모든 필드와 메서드 요소를 그대로 가지고 있으며(또는 오버라이드로 메서드 재정의) 여기에 자식 클래스 고유의 요소들을 갖고 있기 때문에 부모 클래스로 자동 타입 변환이 되더라도 사용에 지장이 없습니다. Parent parent = new Child(); 자, 여기서 '자동' 타입 변환에 대해서 말했으면 자동이 아닌 것도 있겠죠? 맞습니다. 이는 [강제 타입 .. 상속(9) - 파라미터의 다형성 앞선 아티클에서, 다형성에 대해 살펴보면서 상속받은 자식 클래스의 자동 변환이 일어나는 케이스에 대해서 살펴보았습니다. 이때 주로 인스턴스 생성 과정을 중심으로 다루었고, 결국 '필드'값이 자동 변환되는 경우에 대해서 자세하게 알아봤습니다. 이 과정에서 자식 클래스 타입이 부모 클래스 타입으로 자동 변환이 일어나고, 사용할 수 있는 메서드와 필드 값에 변화가 생기는 특성과 오버라이드의 실제 적용 사례를 살펴보았습니다. 그런데, 이 다형성이 발현되는 것이 비단 필드 영역에서만 한정되어 일어나는 것이 아닙니다. 필드 값뿐만 아니라 파라미터에서도 동일한 성격을 적용하고 다형성의 성질을 활용할 수 있기 때문이죠. 필드에서와 마찬가지로, 부모 클래스 타입의 데이터를 요구하는 경우에 자식 클래스 타입의 데이터를 자.. 상속(8) - 배열을 이용한 객체 관리 이번 시간에는, 상속과 직접적인 관련이 있는 기능은 아니지만 배열을 통해 다수의 객체를 관리하는 방법에 대해서 살펴보겠습니다. 일종의 코드 최적화 방법이라고 볼 수 있는데, 다수의 인스턴스를 다루는 데 있어서 효율성을 증대할 수 있고 자식 객체의 자동 변환과도 연관되어 있는 방법입니다. 앞선 아티클에서 작성한 Car, Tire 클래스 예시를 수정해서 진행해 보겠습니다. 상속(7) - 필드의 다형성 3 지난 아티클에서 필드의 다형성 예제를 위한 Tire, Car 클래스 작성을 진행했습니다. 이어서 Tire를 상속받는 자식 클래스와 실행 클래스에 대해서 살펴보겠습니다. public class Tire { // 필드 public int m nozeroslope.tistory.com 우선 Car 클래스의 필드를.. 상속(7) - 필드의 다형성 3 지난 아티클에서 필드의 다형성 예제를 위한 Tire, Car 클래스 작성을 진행했습니다. 이어서 Tire를 상속받는 자식 클래스와 실행 클래스에 대해서 살펴보겠습니다. public class Tire { // 필드 public int maxRotation; public int accumulatedRotation; public String location; // 생성자 public Tire(String location, int maxRotation) { this.location = location; this.maxRotation = maxRotation; } // 메서드 public boolean roll() { ++accumulatedRotation; if(accumulatedRotation < maxR.. 상속(7) - 필드의 다형성 2 앞선 예제에서, 간단히 Tire와 Car 클래스를 예시로 들어 필드 값의 다형성을 살펴보았습니다. 이제 본격적으로 상세 코드 작성을 통해 다형성을 활용한 프로그램을 짜보도록 하겠습니다. 일단 Tire 클래스를 먼저 설계해 보겠습니다. Tire 클래스가 갖는 필드와 생성자, 메서드에 대해서 아래와 같이 요약해 보았습니다. 아래의 요약 내용을 통해서 Tire 클래스를 작성해 볼까요? ○ Tire 클래스 필드 · maxRotation : 최대 회전 수. 타이어의 수명을 의미하며, 이 수치에 도달하면 타이어는 망가진다. · accumulatedRotation : 누적 회전 수. roll( ) 호출 시 1씩 증가해 누적되며, 이 수치가 maxRotation이 되면 망가진다. · location : 타이어의 위치를.. 상속(7) - 필드의 다형성 1 앞서서 자바의 다형성에 대해 공부하면서, 클래스의 상속관계와 이에 따라서 부모 클래스로 타입의 자동 변환이 일어날 수 있고, 그럼에도 불구하고 자동 변환이 일어난 객체에서도 오버라이드를 통해 자식 클래스에서 재정의된 메서드까지 호출될 수 있음을 배웠습니다. 짧게 한 단락으로 요약하였지만, 앞으로 배울 다형성에 관련된 성질들과 학습 내용은 이 전제 조건을 바탕으로 설명되기 때문에 잊지 말고 다시 한번 꼭 복습하시기를 바랍니다. 이제부터는 이 다형성이라는 성질이 실제 프로그램 설계에 어떻게 이용되는지 구체적으로 살펴보도록 하겠습니다. 우선 대표적인 예시인 자동차의 타이어 사례를 중심으로 설명해 보겠습니다. 기본적으로 자동차인 Car 클래스, 타이어인 Tire 클래스가 존재합니다. 그리고 Tire라는 클래스를.. 이전 1 ··· 13 14 15 16 17 18 다음