본문 바로가기

Programming/JAVA

(139)
인터페이스(6) - 인터페이스 구현 : 다중 인터페이스 구현 지금까지는 일단 한 개의 인터페이스를 통해, 하나의 객체를 호출하는 형태로 연습해 왔습니다. 하지만, 부동산 거래를 할 때 하나의 매물에 여러 개의 부동산이 중개를 진행하듯이 - 여러 개의 인터페이스가 다중으로 하나의 구현 클래스를 호출하게 되는 경우도 있습니다. 하나의 클래스가 다중의 인터페이스를 구현하게 된다는 의미지요. 만일 하나의 클래스에 두 개의 인터페이스인 '인터페이스1'과 '인터페이스2'가 모두 구현된다고 가정하면, 아래와 같은 형태로 구현 클래스가 선언되어야 합니다. 물론 인터페이스1과 2의 모든 추상 메서드를 구현해야만 합니다. 하나라도 구현이 빠지게 되면 해당 구현 클래스는 추상 클래스로서 선언되어야 하는 것은 기본 구현 클래스에서의 원칙과 동일합니다. public class 구현클래스..
인터페이스(5) - 인터페이스 구현 : 익명 객체의 구현 앞선 아티클에서 우리는 RemoteControl이라는 인터페이스를 생성하고, 이를 구현하는 Television과 Audio라는 구현 클래스를 만들었습니다. 설명했다시피, 이 인터페이스를 구현하는 구현 클래스를 만들고 - 실행 클래스에서 구현 객체 인스턴스를 생성해 실행하는 형태를 취했습니다. 인터페이스(4) - 인터페이스 구현 기본 원리 인터페이스는 앞서 설명했듯이, 개발 코드에서 인터페이스 메서드를 호출하고 그 인터페이스가 객체의 메서드를 호출하는 구조입니다. 인터페이스는 중개자의 역할을 하기 때문에, 실제 구현 nozeroslope.tistory.com public class ExampleMain { public static void main(String[] args) { RemoteControl r..
인터페이스(4) - 인터페이스 구현 기본 원리 인터페이스는 앞서 설명했듯이, 개발 코드에서 인터페이스 메서드를 호출하고 그 인터페이스가 객체의 메서드를 호출하는 구조입니다. 인터페이스는 중개자의 역할을 하기 때문에, 실제 구현 객체에서는 인터페이스에 정의된 추상 메서드와 동일한 이름과 파라미터와 리턴 타입을 갖는 실체 메서드를 가지고 있어야 하겠죠? 이는 추상 메서드에서도 배운 동일한 개념입니다. 여기서 인터페이스가 선언한 메서드의 실체를 갖고 있는 객체를 인터페이스 구현(implement) 객체라고 칭합니다. 당연히 이 구현 객체를 생성하는 클래스는 구현 클래스로 칭하게 되죠. 특정 인터페이스의 구현 클래스를 선언할 때는 implements 키워드를 추가하고, 인터페이스 명을 명시해야 합니다. public class 구현클래스이름 implement..
인터페이스(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) - 추상 클래스 2 앞의 추상 클래스 아티클에서는 다소 길지만 추상 클래스의 개념과 관념적인 특성을 함께 살펴보았습니다. 추상 - 실체 클래스의 관계가 부모 - 자식 클래스의 기본 관계를 의미하며, 추상 클래스는 일반적인 부모 클래스처럼 인스턴스 생성이 불가능하고 오로지 실체 클래스들의 공통 성분을 상속하는 역할만을 한다고 했습니다. 이제, 이러한 추상 클래스의 기본 특성을 바탕으로 왜? 이러한 클래스를 사용하는지 살펴보겠습니다. 상속(12) - 추상 클래스 1 추상 클래스는 이름만 보았을 때는 상속과 관계가 없어 보이지만, 사실 추상 클래스는 부모-자식 클래스의 사용의 응용된 버전입니다. 그래서 기본적인 클래스 상속 관계에 대한 이해도 뒷받침 nozeroslope.tistory.com 기본적으로 추상 클래스의 목적을 이해..