java (45) 썸네일형 리스트형 인터페이스(7) - 인터페이스의 구현과 사용 2 : 디폴트, 정적 메서드 ○ 인터페이스의 디폴트 메서드 사용 디폴트 메서드는 인터페이스의 모든 인스턴스가 자동으로 보유하게 되는 말 그대로 '기본' 메서드입니다. 별다른 오버라이드 없이도, 기본적인 추상 메서드 구현만 잘 이루어졌다면 특별한 구현 클래스에서의 작업 없이 사용이 가능하죠. 실행 코드는 이미 인터페이스 상에 선언이 되어 있습니다. 물론, 엄격하게 구조를 따지면 인터페이스 상에 실행 코드가 정의되어 있긴 하지만 - 실제로는 구현 클래스 인스턴스가 보유하고 있는 구조라고 생각해야 합니다. 그리고 위의 문장에서 구현 클래스의 인스턴스가 보유하는 메서드라고 말했습니다. 이 부분을 강조하는 이유는 무엇일까요? 그건 인터페이스에 실행 코드가 선언되어 있긴 하지만, 반드시 구현 클래스 인스턴스를 통해서만 실행이 가능한 메서드이기.. 인터페이스(7) - 인터페이스의 구현과 사용 1 : 추상 메서드 사용 지금까지 인터페이스와 관련해 여러 가지 원리와 기본 규칙들에 대해서 알아보았습니다. 본격적으로 인터페이스에서 선언한 내용을 구현하고, 실제 실행 코드에서 사용하는 방식에 대해서 살펴보도록 하겠습니다. 우선, 기본적인 내용을 다시 한번 되짚어 보도록 하겠습니다. 인터페이스를 사용하기 위해서는, 우선 인터페이스 타입의 변수를 선언하고 여기에 구현 클래스의 인스턴스를 대입합니다(만일 익명 객체 형태로 구현한다면 인터페이스 타입). 당연하지만 인터페이스 타입의 변수도 참조 타입이므로 구현 클래스 인스턴스의 메모리 주소를 참조하게 됩니다. RemoteControl rc = new Television(); RemoteControl rc2; rc2 = new Audio(); 참고로 인터페이스는 사용 범위에 있어서 클.. 인터페이스(3) - 인터페이스 구성멤버의 개념과 특성 ○ 상수 필드(constant field)의 선언 이전에도 설명했듯이, JAVA의 인터페이스 자체는 데이터를 직접 저장할 수 없는 구조입니다. 그래서 인스턴스 객체의 생성도 불가능합니다. 또한, 인스턴스 필드와 더불어 정적(static) 필드 역시 가질 수 없죠. 인터페이스는 오로지 상수(static final) 필드 만을 가질 수 있습니다. - 상수는 우리가 static 챕터에서 배웠듯이 [public static final] 타입으로 선언됩니다. - 상수의 이름은 모두 대문자로 작성하고, 단어별 구분은 언더바(_)로 합니다. - 인터페이스에서 상수는 static { } 블록도 이용할 수 없습니다. 반드시 선언과 동시에 초기값이 필요합니다. - 인터페이스에서 상수 선언 시, [public / stati.. 인터페이스(2) - 인터페이스의 선언과 구성 멤버의 특성 인터페이스는 앞서 언급했다시피, 클래스와 물리적으로 같은 레벨로 생각해 주시면 됩니다. 그래서 인터페이스 이름 자체의 작명 원칙도 클래스와 동일하게 처리해 주면 됩니다. 이클립스 등에서 인터페이스를 생성해 주면, 클래스 형태로 다음과 같이 생성됩니다. [public] interface 인터페이스명칭 { ... } // 예시 public interface RemoteControl { } ○ 인터페이스의 구성 멤버 - 기본적으로 인터페이스는 객체로 생성할 수 없는 개념이기 때문에, 생성자를 갖지 않습니다. - 인터페이스는 상수(필드) / 메서드만을 구성 멤버로 갖습니다. 이 두 개의 원칙을 잘 기억해야 합니다. 그럼 구성 멤버는 구체적으로 어떤식으로 선언 및 사용할 수 있을지 하나씩 짚어보도록 하겠습니다. .. 인터페이스(1) - 인터페이스의 역할 개인적으로 자바의 '인터페이스(interface)' 개념은 꽤 복잡하고, 대충 넘어가다 보면 이해하기 어렵다는 인상을 많이 받습니다. 일단 추상 클래스/메서드에서부터 시작된 설계를 위한 개념에 가깝고, 지금까지 배운 대부분의 객체와 설계구조가 복합적으로 들어가 있는 성질에 가깝기 때문입니다. 클래스나 추상 클래스를 학습할 때는 (초심자 입장에서) 꽤 일관적인 원칙을 이해하면 됐지만, 인터페이스는 그야말로 지금까지 배운 JAVA의 언어 구조를 잘 이해하고 있다는 가정 하에 사용되는 기능이기 때문에 앞서 학습한 내용이 잘 기억나지 않는다거나 이해하지 못한 상태라면 금방 벽에 부딪힐 수 있습니다. 이해하기 어려운 개념이 나오거나, 이전에 배운 개념이 잘 생각나지 않는다면 지체 없이 앞에서 배운 내용을 다시 복.. 상속(13) - 추상 메서드 + 오버라이드 우리는 지금까지 추상 클래스의 개념과 사용법에 대해서 살펴보았습니다. 이제 메서드 사용과 관련된 내용을 좀 더 구체화시켜서 살펴보도록 하겠습니다. 만일, 추상 클래스를 사용할 때 모든 실체(자식) 클래스가 추상(부모) 클래스에 선언된 메서드를 그대로 사용한다면 큰 문제가 없을 것입니다. 하지만, 실체 클래스에서 각각 메서드가 조금씩 다른 동작을 해야 한다면? 문제가 됩니다. 예를 들어, 알아서 실체 클래스에서 메서드를 선언해서 정의하라고 할 경우에는 우리가 추상 클래스를 만드는 목적처럼 각각 메서드 이름이 제멋대로 선언될 가능성도 있습니다. 혹은, 실수로 해당 메서드를 빼먹는 실수를 할 수도 있지요. 물론 '추상 클래스에서 메서드를 선언해두고, 실체 클래스에서 알아서 오버라이드 하면 해결되는 문제 아닌가.. 상속(12) - 추상 클래스 1 추상 클래스는 이름만 보았을 때는 상속과 관계가 없어 보이지만, 사실 추상 클래스는 부모-자식 클래스의 사용의 응용된 버전입니다. 그래서 기본적인 클래스 상속 관계에 대한 이해도 뒷받침되어야 공부하기 편하니, 염두에 두시기 바랍니다. 일단, 개념부터 잡아보겠습니다. 여기서 말하는 '추상(abstract)'의 개념은 "어떤 실체가 있는 존재에서 공통되는 특성을 추출한 것"을 의미합니다. 뜬구름 잡는 소리 같다고요? 전혀 아닙니다. '공통되는 특성'을 뽑아서 만든 것이 추상 클래스의 핵심입니다. 그럼, 어떤 것들의 '공통되는 특성'을 뽑는 것일까요? 바로 [실체가 있는 클래스]의 공통된 특성을 뽑아서 모으는 것입니다. 여기에 상속의 개념을 덧붙여 보겠습니다. 등장인물은 '추상 클래스'와 '실체 클래스'입니다.. 상속(11) - 객체의 타입 확인(instanceof) 우리는 앞선 아티클에서, 다소 머리는 아팠지만 자식 클래스 타입의 객체를 부모 클래스 타입 객체로 강제 타입 변환을 진행하는 과정을 살펴보았습니다. 여기서, 당연한 이야기를 하나 하자면 "순수 부모 클래스 타입의 객체"는 자식 클래스 타입의 객체로 강제 타입 변환이 불가능합니다. 아래와 같은 경우를 의미하죠. Parent parent = new Parent(); Child child = (Child) parent; // 불가능 반복되는 얘기지만, 부모 클래스의 경우에는 자식 클래스 고유의 속성들을 갖고 있지 않기 때문에 이런 변환은 불가능합니다. 자, 그럼 어떤 코드를 설계하는 과정에서, "부모 클래스 타입의 변수"가 있다고 가정하고 이를 캐스팅(casting)할 때 우리는 한 가지를 주의해야 합니다. .. 이전 1 2 3 4 5 6 다음