일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- eclips
- 데이터베이스
- 리눅스
- 이클립스
- 알고리즘
- 자바기초
- 기초코딩
- 컴퓨터과학개론
- 스프링 기초
- JShell
- 스프링
- 프로그래밍기초
- 초보코딩탈출
- 제이쉘
- 프로그래밍언어
- Elk
- github
- 배열
- 메소드
- Java
- JAVA기초
- 자바프로그래밍
- 코딩초보
- 자바
- 자바 스프링
- spring
- 초보코딩
- Git
- 클래스
- 프로그래밍
- Today
- Total
키보드워리어
[자바] 인터페이스에 관한 이야기 (interface) 본문
안녕하세요!! 【Keyboard Warrior】
블로그 방문자 여러분, 안경닦이입니다.
오늘은 인터페이스 에 대해 알아보겠습니다.
인터페이스 (Interface)
자바를 처음 시작하는 프로그래머들은 인터페이스와 추상 클래스를 차이점을 이해하기 힘들어합니다.
인터페이스와 추상 클래스는 모두 객체 지향 프로그래밍에서 상속과 다형성을 구현하는 방법 중 하나입니다.
그렇지만 두 가지 구현 방식에는 몇 가지 차이점이 있습니다.
구현 방식
추상 클래스는 일반 클래스와 마찬가지로 상속을 통해 사용됩니다.
추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있으며, 이러한 추상 메서드는 하위 클래스에서 구현해야 합니다. 추상 클래스는 추상 메서드 외에도 일반 메서드, 필드 등을 가질 수 있습니다.
인터페이스는 클래스와는 달리 인터페이스만으로 객체를 생성할 수 없습니다. 인터페이스는 하위 클래스에서 구현해야 하는 메서드만을 선언합니다. 인터페이스는 모든 메서드가 추상 메서드이며, 추가적으로 상수 필드만을 가질 수 있습니다.
상속
상속을 갖는 거도 다른데요
둘 다 상속을 통해 확장이 가능하지만, 추상 클래스는 클래스 계층 구조에서 상위 클래스로 위치하면서 하위 클래스에 공통적인 메서드나 필드를 상속할 수 있도록 하는 반면, 인터페이스는 인터페이스 간의 계층구조에서 구현클래스에서 구현해야 하는 메서드를 지정해 주는데 주로 사용됩니다.
추상 클래스와 인터페이스는 목적이 다르기 때문에, 각각의 상황에 맞게 사용해야 합니다.
public interface GamingConsole {
public void up();
public default void go() {//default는 꼭 구현안해도 됩니다.
}
public void down();
public void left();
public void right();
}
위 인터페이스를 구현하고자 하는 클래스를 만들어볼게요.
public class MarioGame implements GamingConsole {
@Override
public void up() {
System.out.println("Jump");
}
@Override
public void down() {
System.out.println("Go into a hole");
}
@Override
public void left() {
}
@Override
public void right() {
System.out.println("Turn right");
}
}
implements 키워들르 쓰면 자바에서 "당신 이걸 구현해야 해"하고 알려줍니다.
다중 상속
추상 클래스는 하나의 클래스만 상속할 수 있습니다. 따라서, 추상 클래스를 상속하면 하위 클래스는 다른 클래스를 상속할 수 없습니다.
인터페이스는 다중 상속이 가능합니다. 정확히는 다중 구현이 맞아요. 인터페이스를 구현하는 클래스는 여러 개의 인터페이스를 구현할 수 있습니다.
public interface Flyable {
void fly(); // 비행 메서드
}
public interface Swimmable {
void swim(); // 수영 메서드
}
public class Bird implements Flyable {
public void fly() {
System.out.println("I can fly");
}
}
public class Fish implements Swimmable {
public void swim() {
System.out.println("I can swim");
}
}
public class Duck implements Flyable, Swimmable {
public void fly() {
System.out.println("I can fly");
}
public void swim() {
System.out.println("I can swim");
}
}
자바 인터페이스를 통해 외부에서 알고리즘 정의하는 법을 간단하게 설명드리자면 이렇습니다.
프로젝트를 두 팀으로 나누어 개발하면서, 복잡한 알고리즘을 구현하는 A팀과 그 알고리즘을 사용하는 B팀이 존재합니다.
이때, A팀이 만든 인터페이스 ComplexAlgorithm를 구현하는 클래스 DummyComplexAlgorithm를 B팀이 이용함으로써, B팀은 그 알고리즘을 직접 구현할 필요 없이 ComplexAlgorithm 인터페이스를 사용할 수 있습니다.
이를 통해, 인터페이스는 다른 두 개 이상의 프로젝트에서 서로 소통할 수 있도록 해주는 중요한 역할을 합니다.
public interface ComplexAlgorithm {
int complexAlgorithm(int number1, int number2);
}
public class DummyComplexAlgorithm implements ComplexAlgorithm {//A팀이 작성
@Override
public int complexAlgorithm(int number1, int number2) {
return number1 + number2;
}
}
public class Project {
public static void main(String[] args) {
ComplexAlgorithm algorithm = new DummyComplexAlgorithm(); //B팀이 작성
algorithm.complexAlgorithm(3, 5);
// Your complex implementation will be present here..
}
}
아주 기초적인 인터페이스 사용법입니다. 다음에 기회가 된다면 느슨한 결합에 대해 배우게 될텐데 이 때, 인터페이스가 매우 중요합니다.
'JAVA > 입문' 카테고리의 다른 글
[자바] ArrayList 활용 (0) | 2023.03.20 |
---|---|
[자바] 컬렉션 소개: Java의 List 이해 (0) | 2023.03.16 |
[자바] 추상클래스 제한과 활용 (0) | 2023.03.11 |
[자바] - 다중 상속과 참조 변수에 얽힌 퀴즈 (0) | 2023.03.10 |
[자바] 객체지향 - super키워드를 이용한 부모클래스 이용 (0) | 2023.03.09 |