[java공부] 인터페이스와 추상메서드의 개념
# 추상메서드 관점이다
구현이 없는 설계도
메서드의 접근은 메서드명. getHour()
인터페이스는 추상메서드의 집합이다.
-추상클래스와 인터페이스의 차이가 뭐냐?
-틀
interface 인터페이스이름 {
상수와
추상메서드
}
코드
public interface MyInterface {
// 상수
int MY_CONSTANT = 10;
// 추상 메서드
void myMethod();
}
이 인터페이스를 구현한 클래스는 다음과 같습니다.
java
public class MyClass implements MyInterface {
@Override
public void myMethod() {
System.out.println("MyClass에서 myMethod를 구현합니다.");
}
}
Spring과 Spring Boot에서도 이와 같은 방법으로 인터페이스를 사용할 수 있습니다. 특히, Spring에서는 인터페이스를 사용하여 의존성 주입(Dependency Injection)을 구현합니다.
예를 들어, 아래는 서비스 계층의 인터페이스를 정의하고, 해당 인터페이스를 구현한 클래스를 생성하는 예입니다.
java
public interface MyService {
void performTask();
}
@Service
public class MyServiceImpl implements MyService {
@Override
public void performTask() {
// Task 수행
}
}
인터페이스는 안써도 abstract이다 .
## 인터페이스의 조상은 인터페이스만 가능하다 (Object가 최고조상이아님)
1.인터페이스조상은 인터페이스만 가능하다.
2.
-상속을 받는조건
충돌될 일이없다
메소드 명만 있다.
-공통점 추상메서드와 인터페이스의 공통점
미완성 설계도
### 인터페이스의 구현
인터페이스의 상속은 extend를 쓰지않고 implements를 쓴다.
implements는 구현을 말한다.
구현의 조건으로는,
abstract 를 사용하고 implements로 상속받는다.
-코드작성요령
추상클래스 구현
extends 는 void 메소드명(파라미터)로
코드
public class ParentClass {
public void parentMethod() {
System.out.println("This is a method in ParentClass.");
}
}
public class ChildClass extends ParentClass {
public void childMethod() {
System.out.println("This is a method in ChildClass.");
}
}
인터페이스 구현
implements는 public void 메소드명 (파라미터)로 ,
코드
public interface MyInterface {
void myMethod();
}
public class MyClass implements MyInterface {
@Override
public void myMethod() {
System.out.println("This is an implementation of myMethod in MyClass.");
}
}
정리,
extends: 클래스를 상속받을 때 사용합니다. 상속을 통해 부모 클래스의 속성과 메서드를 자식 클래스에서 사용할 수 있습니다.
implements: 인터페이스를 구현할 때 사용합니다. 인터페이스는 메서드의 시그니처만 정의하며, 이를 구현하는 클래스에서는 인터페이스의 모든 메서드를 구현해야 합니다.
-공통점
미완성 설계도
추상메서드이다.
-차이점
iv를 가질수있느냐 없느냐이다.
멤버변수를 가질수 있으냐 없느냐이다.
abstract는 iv를 가질수있다.
interface는 iv를 가질수없다.
생성자,인스턴스메서드도 안된다.
추상메서드만 된다.
-종류
(static , 상수, 디폴트 메서드)
public, abstract 키워드를 사용하여 선언되며, 구현 부분이 없고 메서드 시그니처
디폴트 메서드 (Default Methods)
정적 메서드 (Static Methods)
private 메서드 (Private Methods) Java 9부터 인터페이스는 private 메서드를 가질 수 있습니다.)
구현이없다 껍데기만 있다.
-종류 정리,
class figter는 new figter의 객체의공간이고,
extends Unit 타입이고
implements Figtable 타입이다.
interface Fightable{
void move(int x, int y);
void attack(Fightable f);
}
면 2개만 사용가능하다.
f.move(100,.200);
f.attack(new Figter()); 으로 2개만 사용가능하다.
#### 인터페이스를 이용한 다형성
다중상속은 충돌의 문제를 가지고있다.
-코드" 인터페이스는 인터페이스 조상이면 인터페이스 부모는 자동 타입변환이 가능핟.
Fightable method(} {
Fighter f = new Fighter();
return f;
} fightable이 조상이라서 Fighter f 인터페이스로 객체 반환 구현이 가능하다는
-코드 사용법 (최종장)
public interface Fightable { //호출전문
void fight();
}
public class Fighter implements Fightable { //구현전문
public void fight() {
System.out.println("Fighter is fighting");
}
}
public class Game {
public Fightable createFighter() { //Fightable 타입을 쓴 createFighter() 메소드를
return new Fighter(); //new Fighter담았다?
}
}
그렇다면, new Fighter는 "Fighter is fighting"를 출력한다
-인터페이스의 규칙
1.조상보다 자식이 타입의 범위가 좁으면 안된다.
조상이 public을 사용하면 자식은 public을 사용해야된다
2. 인터페이스의 모든 메서드는 public abstract 이다. 예외없이
-리턴의 조건
타입( fighterable )메소드명() {
fighterable f = (생략된 fighterable 타입 ) new fighter();
// return 타입 ( fighterable) f 를 써야되는데
// new로 썻기에 리턴에 f를 안쓰고 리턴 f 로 받을수있다.
return f
}
-JDBC 표준개발
1. 개발시간을 단축할수있다.
2. 변경이 유리한 설계가 가능하다
3. 표준화 가능하다.
4. 중간 JDBC 집합을 중간에 넣으면 DB를 넣으면 변경을 안해도된다.
->표준화가 가능하다.
5. 서로 관계없는 클래스들을 관계를 맺어주는것에 대한
인터페이스로 따로 묶어서
부모 <-> 자손 관계를 맺어줄수있다.
class Dropship extends AirUnit implements Repairable {
// Dropship 객체new 상속. 자손 구현연결. Repairable
}
##### 인터페이스의 장점
inter ~사이
face 얼굴(대상)
두 대상(객체)간의 (연결, 대화 , 소통) 을 톱는 '중간 역할'을 한다.
사용자가 껍데기를 눌러서 쉽게 사용하게끔 하는것
자판기 껍데기
버튼읠 껍데기를 만든다는 것으로 이해 = interface
그리고 그안에 내용만 바꾸자
class A {
public void methodA ( I i ) { // 매개변수의 타입(I) 과 매개변수의 이름(i)
i. methodB();
}
}
interface I { void methodB(); }
class B implements I {
public void methoDB () {
system.out.println("methodB()");
}
}
-인터페이스 최종장 사용방법
1.
method()의 선언과
method()의 구현의 분리가 목적이다.
2. 변경을 최소화하기 위해서
-파라미터에 대한
메소드의 파라미터와 관련된 기본 개념을 소개하고 있으며, 파라미터의 타입, 파라미터의 순서, 가변인자(varargs) 같은 고급 주제도 다루고 있습니다. 이를 통해 파라미터에 대한 이해를 더욱 깊게 할 수 있습니다.
-파라미터의 규칙
자바에서 메소드의 파라미터는 "타입"과 "매개변수 이름"으로 구성됩니다. 이 두 요소가 메소드 내부에서 입력값을 어떻게 처리할지를 결정합니다.
타입: 파라미터가 받을 수 있는 데이터의 타입을 결정합니다. 이는 기본 데이터 타입(int, double, boolean 등)이 될 수도 있고, 참조 데이터 타입(String, List, 사용자 정의 클래스 등)이 될 수도 있습니다. 또한, 인터페이스도 파라미터의 타입이 될 수 있습니다.
매개변수 이름: 메소드 내부에서 파라미터를 참조할 때 사용되는 이름입니다. 이 이름은 메소드 내부에서만 유효하며, 메소드 외부에서는 접근할 수 없습니다.
댓글