주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 디폴트 메서드는 모든 구현 객체에서 공유하는 기본 메서드처럼 보이지만, 사실은 인터페이스에서 디폴트 메서드를 허용한 다른 이유가 있습니다. 디폴트 메서드의 필요성 인터페이스에서 디폴트 메서드를 허용한 이유는 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위함입니다. 기존 인터페이스의 이름과 추상 메서드의 변경 없이 디폴트 메서드만 추가할 수 있기 때문에 이전에 개발한 구현 클래스를 그대로 사용할 수 있으면서 새롭게 개발하는 클래스는 디폴트 메서드를 활용할 수 있습니다. 기존에 MyInterface라는 인터페이스와 이를 구현한 M..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 인터페이스도 다른 인터페이스를 상속할 수 있습니다. 인터페이스는 클래스와는 달리 다중 상속을 허용합니다. 다음과 같이 extends 키워드 뒤에 상속할 인터페이스들을 나열할 수 있습니다. public interface 하위인터페이스이름 extends 상위인터페이스이름1, 상위인터페이스이름2 { ... } 하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메서드뿐만 아니라 상위 인터페이스의 모든 추상 메서드에 대한 실체 메서드를 가지고 있어야 합니다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 앞서 상속에서 타입 변환과 다형성에 대해 살펴보았습니다. 인터페이스도 다형성을 구현하는 기술이 사용됩니다. 오히려 요즘은 상속보다는 인터페이스를 통해서 다형성을 구현하는 경우가 더 많습니다. 상속에서 부모 타입에 어떤 자식 객체를 대입하느냐에 따라 실행결과가 달라지듯이, 인터페이스 타입에 어떤 구현 객체를 대입하느냐에 따라 실행 결과가 달라집니다. 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이라는 개념적 차이는 있지만 둘 다 다형성을 구현하는 기술임에는 틀림없습니다. (그..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 자바에서 인터페이스(Interface)는 객체의 사용 방법을 정의한 타입입니다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는 데 매우 중요한 역할을 합니다. 특히 자바 8에서 람다식은 함수적 인터페이스의 구현 객체를 생성하기 때문에 그 중요성은 더욱 커졌습니다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 합니다. 개발 코드가 인터페이스의 메서드를 호출하면 인터페이스는 객체의 메서드를 호출시킵니다. 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메서드만 알고 있으면 됩니다..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 사전적 의미로 추상은 실체 간에 공통되는 특성을 추출한 것을 말합니다. 예를 들어서 새, 곤충, 물고기 등의 실체에서 공통되는 특성을 추출해보면 동물이라는 공통점이 있습니다. 또 다른 예로 삼성, 현대, LG 등의 실체에서 공통되는 특성을 추출해보면 회사라는 공통점이 있습니다. 이와 같이 동물이나 회사는 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있습니다. 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 합..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이전 예제에서 Car 클래스에 4개의 타이어 객체를 4개의 필드로 각각 저장했습니다. 하지만 동일한 타입의 값들은 배열로 관리하는 것이 유리합니다. public class Car { Tire[] tires = { new Tire("앞왼쪽", 6), new Tire("앞오른쪽", 2), new Tire("뒤왼쪽", 3), new Tire("뒤오른쪽", 4), }; } 배열로 관리하게 되면 네 개의 바퀴가 모두 인덱스로 표현되므로 대입이나 제어문에서 활용하기가 쉽습니다. 예를 들어 인덱스 1을 사용해서 앞 오른쪽 타이어를 KumhoTi..