본문 바로가기

Programming/JAVA

(139)
상속(6) - 타입 변환과 다형성 3 앞서 살펴본 아티클에서 상속과 이와 관련한 중요 특성 중 하나인 다형성에 대해서 기본적인 개념과 특징을 살펴보았습니다. 다시 한번 짚고 넘어가자면, 결국 하나의 타입의 데이터를 이용하지만 다양한 결과를 얻을 수 있는 특징이라는 점이 주요 포인트였죠? 이번에는 추가적으로 알고 있어야 할 상속 관계에 있어서 관련되는 상속 객체의 특징을 살펴보고, 예제를 통해 종합적으로 클래스의 상속과 다형성의 특징을 알아보고자 합니다. 우선 지금까지 예제를 통해 설명하면서 Parent - Child 클래스 1개씩을 다루었습니다. 그럼 여기서 하나 더 의문이 생기는 지점이 있습니다. 만일, Parent - Child - Child2 - Child3....와 같이 연속적으로 복수의 상속관계가 성립하는 경우에는 다형성의 특징이 ..
상속(6) - 타입 변환과 다형성 2 앞서 상속과 관련하여, 다형성이란 성질에 대한 기본 개념을 다루어 보았습니다. 중요한 내용이니 잘 기억이 나지 않으신다면, 다시 한번 상기하고 오시는 것을 추천드립니다.
상속(6) - 타입 변환과 다형성 1(★) 지금부터는 JAVA와 OOP 언어에서 핵심적이면서도 복잡한 내용을 가진 다형성에 대한 내용을 다루겠습니다. 우선, 다형성의 개념을 한 번 간단히 정의해 보자면 "같은 타입을 사용하지만, 다양한 결과가 나올 수 있는 성질"을 의미합니다. 언뜻 한 번에 쉽게 다가오는 개념은 아닙니다. 좀 더 객체(클래스)의 관점에서 설명하면 "하나의 타입에, 여러 타입의 객체를 대입하여 다양한 기능을 구연한다."고도 설명할 수 있습니다. 통상적인 개념에서는 잘 와닿지 않습니다. 하지만, 지금 우리가 이 다형성의 특징을 공부하는 파트는 '상속' 파트입니다. 결국 [하나의 타입 - 여러 다른 성질 대입]이란 특성은 상속으로부터 비롯되는 성질이라는 점을 먼저 눈치챌 수 있어야 합니다. 그러나 애초에 다형성이라는 특징은 일상적인 ..
상속(5) - protected 접근 제한자(★★) 접근 제한자의 종류에는 public, default, private와 더불어 protected가 있습니다. 이 중 public/default/private는 잘 알려져 있지만, protected의 경우에는 상속과 밀접한 관련이 있는 키워드입니다. protected 접근 제한자가 어떤 식으로 상속 클래스에서 동작하는지에 대해서 살펴보도록 하겠습니다. 우선, public과 private의 경우 접근 구분이 명확할 것입니다. public은 대부분의 제한 없이 사용할 수 있으며, private는 오직 해당 클래스에서만 호출과 사용이 가능하다는 점 때문에 기억하기 쉽습니다. default의 경우에는 사용이 public에 가깝지만, 반드시 "같은 패키지 내에서"만 사용이 가능하다는 특징을 갖고 있습니다. 즉 별도의..
상속(4) - final 클래스와 메서드 기본적으로 필드 값에 대한 학습을 진행하면서 final 필드에 대해서 살펴보았습니다. 요약하면, 필드 선언 시 final로 선언되면 초기값을 설정한 이후로는 그 값을 변경할 수 없다는 것이 정의였습니다. 그렇다면, 필드뿐 아니라 클래스/메서드에 final이 선언될 경우에는 어떤 특성을 갖게 될까요? 하나씩 살펴보도록 하겠습니다. 우선 final 클래스에 대해서 살펴보겠습니다. final 클래스는 정의가 생각보다 간단합니다. 특정 클래스가 final로 선언된다면, 어떤 제한이 생길까요? 설마 클래스의 내용을 바꿀 수 없다? 같은 정의는 와닿지 않습니다. 지금 우리가 배우는 카테고리가 '상속'인 만큼, 상속과 관련되어 있습니다. 바로 - final 클래스는 "부모 클래스가 될 수 없다, 즉 상속할 수 없는 ..
상속(3) - 메서드 재정의(override) 2 우리는 앞서 자식 클래스에서 오버라이드를 통해 부모 클래스에서 선언된 메서드를 재정의해 사용하는 내용을 살펴보았습니다. 결국 "자식 클래스 안에서 오버라이드 된 메서드를 선언하고 사용하면, 부모 클래스에서 선언된 메서드는 숨겨진다."라는 대원칙을 따른다는 내용도 확인했습니다. 하지만, 때에 따라서는 자식 클래스에서도 부모 클래스에서 선언된 메서드를 호출하여 사용해야 할 상황도 언제든지 발생할 것입니다. 이 때는 가변적으로 자식 클래스에서 오버라이드 된 메서드가 아닌, 부모 클래스의 메서드를 호출하기 위한 키워드인 super를 사용하게 됩니다. 아마 부모 클래스의 생성자를 명시적으로 호출하는 super( )를 기억하실 겁니다. 동일한 키워드이므로, 부모 클래스의 요소를 호출하는 키워드라고 기억하시면 되겠습..
상속(3) - 메서드 재정의(override) 1 자식 클래스는 앞서 설명했다시피 부모 클래스의 필드와 메서드를 그대로 상속받아 사용할 수 있습니다. 하지만, 항상 부모 클래스에 정의된 메서드가 자식 클래스의 역할과 상황에 맞게 선언되어 있으리라는 보장은 없습니다. 이런 경우에는 상속받은 메서드를 자식 클래스에서 다시 수정 선언하여 재정의 할 필요성이 생깁니다. 이를 위한 기능을 메서드 오버라이딩(Overriding)이라고 합니다. 즉, 오버라이드(override)란 자식 클래스에서 상속받은 동일한 메서드를 재정의 하는 것을 의미하게 됩니다. 만일, 상속받은 메서드에 오버라이드가 이루어졌다면, 자식 객체에서 메서드를 호출할 때 새롭게 재정의된 메서드가 호출되고 부모 클래스에서 선언된 메서드는 호출되지 않습니다. 예를 들어 부모 클래스에도 method1(..
상속(2) - 부모 생성자의 호출(super) 자식 객체는 반드시 부모 객체가 있어야 생겨날 수 있는 존재입니다. 이 점은 이해가 가시죠? 너무나도 당연한 이야기이지만, 다시 이러한 내용을 상기하는 이유는 "부모 객체를 상속하는 자식 객체의 생성"과정에 대한 설명을 진행하기 위해서입니다. 앞서 상속의 개념과 함께 예제를 만들었던 것을 기억하실 겁니다. 상속(1) - 상속의 기본 개념 상속(Inheritance)은 객체 지향 프로그램 언어에서 부모(상위) 클래스를 상속한 자식(하위, 파생) 클래스를 생성하여 부모 클래스의 필드나 메서드를 그대로 사용하는 성질을 의미합니다. 기존에 개 nozeroslope.tistory.com 이 예제에는 다음과 같이 부모 객체(Galaxy)를 상속하는 자식 객체(GalaxySultra)가 new 키워드를 통해 생성되는..