Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- UXUIPrimary
- 티스토리챌린지
- baekjoon
- 디자인챌린지
- 객체지향
- 백엔드
- 오픈패스
- 백준
- 부트캠프
- 내일배움카드
- Be
- 국비지원교육
- 내일배움캠프
- mysql
- KDT
- 백엔드 부트캠프
- Java
- OPENPATH
- 디자인강의
- 백엔드개발자
- 오블완
- 패스트캠퍼스
- 국비지원
- UXUI기초정복
- 디자인교육
- UXUI챌린지
- 오픈챌린지
- 국비지원취업
- 환급챌린지
- Spring
Archives
- Today
- Total
군만두의 IT 공부 일지
[스터디4] 04. 인터페이스 본문
목차
오늘은 8장 인터페이스에 대해서 정리하려고 합니다. 상수에 필드에 대해서 몰랐던 내용을 알게 된 것 같습니다.
8장. 인터페이스
8.1 인터페이스의 역할
- 인터페이스(interface): 두 장치를 연결하는 접속기
- 인터페이스는 두 객체를 연결하는 역할을 함.
- 상속보다 인터페이스를 이용해서 다형성을 구현하는 경우가 많음.
8.2 인터페이스와 구현 클래스 선언
인터페이스는 '*.java' 형태의 소스 파일로 작성되고 '*.class' 형태로 컴파일된다. 물리적 형태는 클래스와 동일하지만, 소스를 작성할 때 선언하는 방법과 구성 멤버가 클래스와 다르다.
인터페이스 선언
- class 키워드 대신 interface 키워드를 사용함.
- 접근 제한자는 dafault, public를 붙일 수 있음.
- 중괄호 안에는 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드, private 메소드, 정적 메소드를 선언할 수 있음.
interface 인터페이스명 { ... }
public interface 인터페이스명 { ... }
구현 클래스 선언
- 인터페이스에 정의된 추상 메소드에 대한 실행 내용이 구현(작성)되어 있어야 함.
- implements 키워드: 해당 클래스가 인터페이스를 통해 사용할 수 있음. 인터페이스의 추상 메소드를 재정의한 메소드가 있음.
// 구현 객체
public class B implements 인터페이스명 { ... }
변수 선언과 구현 객체 대입
- 인터페이스는 참조 타입에 속하므로 인터페이스 변수에는 객체를 참조하지 않는다는 null을 대입할 수 있음.
- 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체(번지)를 대입해야 함.
- 인터페이스 변수에 해당 객체가 대입이 되었다면 변수를 통해 인터페이스의 추상 메소드를 호출할 수 있음.
- 인터페이스 변수에는 구현한 어떤 객체든 대입이 가능함.
RemoteControl rc;
RemoteControl rc = new Television();
RemoteControl rc = new Television();
rc.turnOn();
8.3 상수 필드
- 인터페이스는 public statioc final 특성(생략 가능)을 갖는 불변의 상수 필드를 멤버로 가질 수 있음.
- 상수명은 대문자로 작성하고, 서로 다른 단어로 구성되어 있는 경우에는 언더바(_)로 연결하는 것이 관례임.
- 구현 객체와 관련 없는 인터페이스 소속 멤버인 상수는 인터페이스로 바로 접근해서 상수값을 읽을 수 있음.
[public static final] 타입 상수명 = 값;
int MAX_VOLUME = 10;
System.out.println("리모컨 최대 볼륨: " + RemoteControl.MAX_VOLUME);
8.4 추상 메소드
- 인터페이스는 구현 클래스가 재정의해야 하는 public 추상 메소드(abstract method)를 멤버로 가질 수 있음.
- 추상 메소드: 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호 { }를 붙이지 않는 메소드. public abstract를 생량 가능함.
- 추상 메소드는 객체가 인터페이스를 통해 어떻게 메소드를 호출할 수 있는지 방법을 알려줌. 인터페이스 구현 객체는 메소드의 실행부를 갖는 재정의된 메소드가 있어야 함.
- 구현 클래스에서 추상 메소드를 재정의할 때, 인터페이스의 추상 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public보다 낮은 접근 제한으로 재정의할 수 없음.
- 인터페이스 변수를 선언하고 구현 객체가 대입되면, 인터페이스 변수로 추상 메소드를 호출할 수 있음. 대입된 구현 객체의 재정의된 메소드를 실행함.
8.5 디폴트 메소드
- 인터페이스에는 완전한 실행 코드를 가진 디폴트 메소드를 선언할 수 있음.
- 추상 메소드는 실행부가 없지만, 디폴트 메소드는 실행부가 있음. 실행부에는 상수 필드를 읽거나 추상 메소드를 호출하는 코드를 작성할 수 있음.
- 선언 방법은 클래스 메소드와 동일하고, default 키워드가 리턴 타입 앞에 붙음.
- 디폴트 메소드는 구현 객체가 필요한 메소드임.
- 구현 클래스는 디폴트 메소드를 재정의해서 수정할 수 있음. public 접근 제한자를 반드시 붙여야 하고, default 키워드를 생략해야 함.
[public] default 리턴타입 메소드명(매개변수, ...) { ... }
8.6 정적 메소드
- 인터페이스에는 정적 메소드도 선언할 수 있음.
- 추상 메소드와 디폴트 메소드는 구현 객체가 필요하지만, 정적 메소드는 구현 객체가 없어도 인터페이스만으로 호출할 수 있음.
- 선언 방법은 클래스 정적 메소드와 동일함. 단, public을 생략해도 가능하다는 차이점이 있음.
- 인터페이스에 선언된 정적 메소드는 구현 객체 없이 인터페이스명으로 접근해서 호출할 수 있음.
- 정적 메소드의 실행부를 작성할 때 상수 필드를 제외한 추상 메소드, 디폴트 메소드, private 메소드 등을 호출할 수 없음. 이 메소드들은 구현 객체가 필요하기 때문.
[public|private] static 리턴타입 메소드명(매개변수, ...) { ... }
8.7 private 메소드
- 인터페이스의 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드는 모두 public 접근 제한을 갖고 있고 public을 생략해도 외부 접근이 가능함. 인터페이스에서 외부에서 접근할 수 없는 private 메소드 선언도 가능함.
구분 | 설명 |
private 메소드 | 구현 객체가 필요한 메소드 |
private 정적 메소드 | 구현 객체가 필요 없는 메소드 |
- private 메소드는 디폴트 메소드 안에서만 호출이 가능하지만, private 정적 메소드는 디폴트 메소드뿐만 아니라 정적 메소드 안에서도 호출이 가능함.
- private 메소드는 디폴트와 정적 메소드들의 중복 코드를 줄이기 위한 용도임.
이 글은 『이것이 자바다』 책을 학습한 내용을 정리한 것입니다.
'프로그래밍 > Java' 카테고리의 다른 글
[스터디4] 06. 제네릭 (0) | 2025.03.02 |
---|---|
[스터디4] 05. 중첩 선언과 익명 객체 (0) | 2025.02.25 |
[스터디4] 03. 상속 (0) | 2025.02.09 |
[스터디4] 02. 클래스 (0) | 2025.01.31 |
[스터디4] 01. 참조 타입 (0) | 2025.01.23 |
Comments