본문 바로가기

개발 관련 지식100

인터페이스에서 디폴트 메소드 최초에 A라는 인터페이스가 있었다고 가정을 하자. A 인터페이스를 구현하는 B 클래스에서 A 인터페이스의 추상 메소드를 구현해놨다. 나중에 A 인터페이스에 새로운 기능을 추가해야 해서 새로운 추상 메소드를 선언했다. 근데 B 클래스에서 추가된 추상메소드를 구현할 여건이 안된다면, 에러가 발생할 것이다. 이럴 때 디폴트 메소드를 선언한다. A 인터페이스에 있는 디폴트 메소드는 B 구현 클래스에서 반드시 구현할 필요가 없기 때문에 B 클래스를 문제 없이 사용이 가능하다. 물론 C라는 구현 클래스가 추가 된다면 추상메소드를 반드시 구현해야하지만, 새로운 기능인 디폴트 메소드를 A 인터페이스에 선언한대로 사용해도 되고, 재정의해서 사용해도 된다. 2020. 4. 2.
인터페이스 상속 인터페이스는 클래스와 달리 다중 상속을 허용한다. public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {...} 하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다. 하위인터페이스 변수 = new 구현클래스(...); 상위인터페이스1 변수 = new 구현클래스(...); 상위인터페이스2 변수 = new 구현클래스(...); 하위 인터페이스로 타입 변환되면 상위 인터페이스들과 하위 인터페이스의 모든 메소드를 사용할 수 있고, 상위 인터페이스로 타입이 변환되면 상위 인터페이스에 선언된 메소드.. 2020. 4. 2.
인터페이스 타입변환과 다형성 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이다. 메소드 호출 시 어떤 구현 객체를 매개값으로 주느냐에 따라서 메소드의 실행 결과는 다르게 나온다. 예를 들면, 인터페이스 A의 구현 클래스 B와 C가 있을 때, B클래스를 통해서 원하는 결과가 나오지 않으면 간단하게 C클래스로 바꿔서 실행 할 수 있다. 그것을 유용하게 바꾸기 위해 인터페이스는 메소드의 매개 변수로 많이 사용된다. 매개 변수를 인터페이스 타입으로 선언하면 메소드 호출 시 매개 값으로 다양한 구현 객체를 주어서 다양한 실행 결과가 나오게 할 수 있다. public interface A { // .... } public class B implements A { // .... } pu.. 2020. 4. 2.
인터페이스 인터페이스는 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요하다. 인터페이스는 코드와 객체가 서로 통신하는 접점 역할을 한다. 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그리고 객체가 반환한 데이터를 인터페이스가 코드에 반환한다. 인터페이스를 사용하는 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는 하나의 객체가 아니라ㅏ 여러 객체들과 사용이 가능하기 때문에 어떤 객체를 사용하느냐에 따라 실행 내용과 리턴값이 달라질 수 있다. 따라서 코드 변경없이 실행 내용과 리턴값을 다양화 할 수 있다. 인터페이스 선언은 class 대신에 interface라고 적으면 .. 2020. 4. 1.
추상 클래스 객체를 직접 생성할 수 있는 클래스를 실체 클래스 라고 하고, 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스 라고 한다. 추상 클래스와 실체 클래스는 상속 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식이다. 추상 클래스는 클래스들의 공통적인 멤버만 추출한 것이기 때문에 객체를 생성할 수 없다. new 를 사용할 수 없고 extends 뒤에만 올 수 있다. 추상 클래스를 사용하는 이유 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적 실체 클래스를 설계하는 사람이 다수일 경우, 같은 용도의 필드와 메소드인데도 이름을 다르게 선언하라 수 있기 때문에 통일하기 위한 목적으로 사용한다. 실체 클래스를 작성할 시간을 절약 실체 클래스마다 서로 다른 점만 선언하고 공통적.. 2020. 4. 1.
다형성 다형성은 객체의 타입은 같은데 실행 결과가 다양하게 나타나는 것이다. 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 자바는 부모 타입에 모든 자식 객체가 대입될 수 있다. 클래스 타입의 타입 변환은 상속관계에 있는 클래스 사이에서 발생한다. 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다. 자동 타입 변환은 자식 클래스는 부모 클래스를 상속받기 때문에 부모와 동일하게 취급될 수 있다는 것이다. '부모 클래스 변수 = 자식 클래스 타입' Cat 클래스가 Animal 클래스를 상속 받는다고 할 때, class Animal { .... } class Cat extends Animal { .... } Cat cat = new Cat(); Animal animal = cat.. 2020. 3. 31.