본문 바로가기

java

(45)
상속(10) - 강제 타입 변환(Casting) 우리가 앞선 과정에서 부모 클래스를 상속받는 자식 클래스와 관련하여, [자동 타입 변환]에 대해서 학습했습니다. 요약하면, 주요 원칙은 '자식 클래스는 부모 클래스 타입으로 사용될 수 있다'였죠? 이는 필드에서 인스턴스로 사용될 때 혹은 파라미터 일 경우에도 적용하였습니다. 다시 한번 노파심에 짚고 넘어가자면, 자식 클래스는 기본적으로 부모 클래스의 모든 필드와 메서드 요소를 그대로 가지고 있으며(또는 오버라이드로 메서드 재정의) 여기에 자식 클래스 고유의 요소들을 갖고 있기 때문에 부모 클래스로 자동 타입 변환이 되더라도 사용에 지장이 없습니다. Parent parent = new Child(); 자, 여기서 '자동' 타입 변환에 대해서 말했으면 자동이 아닌 것도 있겠죠? 맞습니다. 이는 [강제 타입 ..
상속(9) - 파라미터의 다형성 앞선 아티클에서, 다형성에 대해 살펴보면서 상속받은 자식 클래스의 자동 변환이 일어나는 케이스에 대해서 살펴보았습니다. 이때 주로 인스턴스 생성 과정을 중심으로 다루었고, 결국 '필드'값이 자동 변환되는 경우에 대해서 자세하게 알아봤습니다. 이 과정에서 자식 클래스 타입이 부모 클래스 타입으로 자동 변환이 일어나고, 사용할 수 있는 메서드와 필드 값에 변화가 생기는 특성과 오버라이드의 실제 적용 사례를 살펴보았습니다. 그런데, 이 다형성이 발현되는 것이 비단 필드 영역에서만 한정되어 일어나는 것이 아닙니다. 필드 값뿐만 아니라 파라미터에서도 동일한 성격을 적용하고 다형성의 성질을 활용할 수 있기 때문이죠. 필드에서와 마찬가지로, 부모 클래스 타입의 데이터를 요구하는 경우에 자식 클래스 타입의 데이터를 자..
상속(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) - 필드의 다형성 1 앞서서 자바의 다형성에 대해 공부하면서, 클래스의 상속관계와 이에 따라서 부모 클래스로 타입의 자동 변환이 일어날 수 있고, 그럼에도 불구하고 자동 변환이 일어난 객체에서도 오버라이드를 통해 자식 클래스에서 재정의된 메서드까지 호출될 수 있음을 배웠습니다. 짧게 한 단락으로 요약하였지만, 앞으로 배울 다형성에 관련된 성질들과 학습 내용은 이 전제 조건을 바탕으로 설명되기 때문에 잊지 말고 다시 한번 꼭 복습하시기를 바랍니다. 이제부터는 이 다형성이라는 성질이 실제 프로그램 설계에 어떻게 이용되는지 구체적으로 살펴보도록 하겠습니다. 우선 대표적인 예시인 자동차의 타이어 사례를 중심으로 설명해 보겠습니다. 기본적으로 자동차인 Car 클래스, 타이어인 Tire 클래스가 존재합니다. 그리고 Tire라는 클래스를..
상속(6) - 타입 변환과 다형성 2 앞서 상속과 관련하여, 다형성이란 성질에 대한 기본 개념을 다루어 보았습니다. 중요한 내용이니 잘 기억이 나지 않으신다면, 다시 한번 상기하고 오시는 것을 추천드립니다.
상속(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( )를 기억하실 겁니다. 동일한 키워드이므로, 부모 클래스의 요소를 호출하는 키워드라고 기억하시면 되겠습..