본문 바로가기
스터디/2209_자바의정석

8주차 과제 : 인터페이스

by Jeong.dev 2022. 10. 11.

📌 인터페이스

- 일종의 추상클래스 (추상클래스보다 추상화 정도 높음)

- 추상메서드와 상수만 멤버로 가질 수 있음

 

인터페이스 작성

package com.kh.sum.myPage.model.service;

public interface MyPageService { // 인터페이스 선언
	int selectCount(); // 추상메소드
	int getQnACount();
}

 

 

인터페이스 상속

- 인터페이스는 클래스와 달리 다중상속 가능

- 다중상속할 경우 상속한 모든 인터페이스의 추상 메소드들을 오버라이딩해서 구현해야 함

 

인터페이스 구현

- 클래스 상속과 비슷. 'extecds' 대신 'implements' 사용

- 인터페이스에 정의된 추상메서드 완성해야 함

- 상속과 구현 동시 가능

package com.kh.sum.myPage.model.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.kh.sum.myPage.model.mapper.MyPageMapper;
import com.kh.sum.myPage.model.mapper.MyQnAMapper;


@Service
public class MyPageServiceImpl implements MyPageService {
	
	@Autowired
	private MyPageMapper mapper;
	
	@Autowired
	private MyQnAMapper qnaMapper;

	@Override
	public int selectCount() {
		
		return mapper.selectCount();
	}

	@Override
	public int getQnACount() {
		
		return qnaMapper.selectMyQnACount();
	}
}

 

 

인터페이스의 장점

- 개발시간 단축 (어느정도 설계도 작성되어 있어서)

- 표준화 가능 (같은 미완성 설계도 틀 사용해 작성하니까)

- 서로 관계없는 클래스들에게 관계를 맺어 줌 (공통 인터페이스 구현하게 해서)

- 독립적인 프로그래밍 가능

(클래스의 선언부(인터페이스)와 구현부(인터페이스 구현한 클래스) 분리시켜서

구현부 변경될 때 선언부를 이용하는 다른 클래스들에게 영향 미치지 않음)

 

 

인터페이스 레퍼런스를 통해 구현체를 사용하는 방법

 

 

인터페이스의 기본 메소드 (Default Method), 자바 8

- 원래는 인터페이스에서는 선언만 가능하고 구현은 안되는데

default 라고 앞에 명시하면 메소드 구현 가능

 - 인터페이스에 새로운 메서드 추가하면 이를 구현하는 모든 클래스가 추가된 메서드를 구현해야해서

이 문제를 해결하기 위해 만들어짐

 

 

인터페이스의 static 메소드, 자바 8

- 인터페이스 내의 static 메소드 생성

- 접근제어자는 항상 public

- 구현부 있어야함, implements 한 클래스에서 override 불가능

 

 


인터페이스의 private 메소드, 자바 9

- 자바 8에서는 default method, static method 추가되고

자바 9에서는 private method, private static method가 추가됨

- 내부에서 처리되는 기능인데도 외부에서 공개되는 public 메소드로 생성해야하는 불편함을 개선하기 위해 만들어짐

 

 

[참고]

- https://dev-coco.tistory.com/13

'스터디 > 2209_자바의정석' 카테고리의 다른 글

11주차 과제 : Enum  (0) 2022.10.18
10주차 과제 : 멀티쓰레드 프로그래밍  (0) 2022.10.18
7주차 과제 : 패키지  (0) 2022.10.06
6주차 과제 : 상속  (0) 2022.09.29
5주차 과제 : 클래스  (0) 2022.09.26

댓글