
🍧 인터페이스(Interface)
이 기능들은 반드시 만들어야 해요!
하고 규칙만 정해주는 틀입니다
예를 들어 은행에는 돈을 넣고 뺄 수 있는 기능이 있어야 해요
이렇게 정하는 게 인터페이스예요
하지만 어떻게 돈을 넣는지 인터페이스가 정하지 않아요
이건 각 은행(클래스)가 정해요
🍧 인터페이스 예시

Action 인터페이스를 만들었고
인터페이스가 갖고 있는 메서드는
그 안의 내용이 존재하지 않습니다
🍧 인터페이스를 사용하는 클래스


class Bank와 class ATMsms 인터페이스를 implements 했다
implements == 구현
🍧 인터페이스를 사용하는 이유
1. 메서드를 같은 방식으로 다룰 수 있다
클래스 별로 같은 행위를 하는 메서드
이름을 다르게 하면 사용하기 불편하다
2. 유지보수가 쉽다
새로운 클래스를 추가해도 Action 인터페이스만
implements 하면 되기 때문이다
...
🍈 추상클래스 (abstract class)
공통 부분은 미리 만들고, 세부적인 건
자식이 알아서 완성할 수 있도록 하는 클래스
기본 뼈대 O, 세부 기능X == 설계도
🍈 추상클래스 예시
은행을 만든다고 하면 모든 은행은
돈을 넣고 뺄 수 있는 것은 같지만 은행마다 영업시간이 다른 것처럼
공통 기능 메서드는 그 클래스 안에 구현할 수 있지만
은행마다 다르게 만들어야 하는 기능은 추상메서드로 구현하여
자식 클래스에서 완성하면 됩니다
🍈 추상클래스를 사용하는 이유
공통된 부분은 미리 만들고
달라지는 부분만 자식에게 맡기기 위해
<하지만>
추상 클래스가 implements로 인터페이스를 구현한다면
일부 또는 전부를 구현하지 않아도 된다
구현하지 않은 메서드는 그대로 추상 메서드로 남고,
이를 상속받은 구체 클래스가 구현해야 한다
🌷 인터페이스와 추상클래스의 차이
| 이런 기능들은 꼭 만들어야 한다 | 이건 기본 뼈대이고 필요한 건 사용자가 채우면 된다 |
| 공통 기능을 강제로 구현시킨다 | 공통 기능을 부분적으로 미리 구현한다 |
| 모두 추상메서드 | 추상메서드 + 일반메서드 |
| public static final 상수형 변수만 가능 | 일반 변수 사용 가능 |
| implements로 구현 | extends로 상속 |
🌷 BankTest.java 전체 코드
package InterfaceTestBank;
import java.util.Scanner;
/*
은행
계좌번호
비밀번호
돈
메뉴
돈을 꺼낸다
돈을 넣는다
직원
ATM
손님
*/
abstract class Bank implements Action {
String accountNum; // 계좌번호
int pw;
int money;
String name;
ATM atm; // 기능
Bank(String accountNum, int pw, String name, int money){
this.accountNum = accountNum;
this.pw = pw;
this.name = name;
this.money = money;
}
@Override
public void menu() {
atm.menu();
}
public void printInfo() {
System.out.println(this.name + "님, \n계좌번호 : " + this.accountNum + "\n입금금액 : " + this.money);
}
}
// 직원
class Employee extends Bank {
Employee(){
super("123-45-687-100", 1234, "직원", 10000000);
}
}
// 사람들
class Person extends Bank {
Person(String accountNum, int pw, String name, int money) {
super(accountNum, pw, name, money);
}
}
// 행동
abstract class ATM implements Action {
}
class InputM extends ATM {
@Override
public void menu() {
System.out.println("돈을 넣는다");
}
}
class OutputM extends ATM {
@Override
public void menu() {
System.out.println("돈을 꺼낸다");
}
}
public class BankTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Bank[] datas = new Bank[5];
System.out.print("계좌번호입력 >> ");
String accountNum = sc.next();
System.out.print("비밀번호입력 >> ");
int pw = sc.nextInt();
System.out.print("이름입력 >> ");
String name = sc.next();
System.out.print("입금금액입력 >> ");
int money = sc.nextInt();
datas[0] = new Person(accountNum, pw, name, money);
datas[0].printInfo();
}
}
'🍏 개발일기' 카테고리의 다른 글
| MVC연습하기 - 7. 종족으로 주민검색 (0) | 2025.10.28 |
|---|---|
| MVC연습하기 - 5. 삭제 (0) | 2025.10.28 |
| MCV 연습하기 - 3. 주민 1명 출력 (0) | 2025.10.24 |
| MVC 연습하기 - 2.전체 출력 (0) | 2025.10.24 |
| MVC 연습하기 - 1. 주민 추가 (0) | 2025.10.24 |