🍏 개발일기

interface 이해하기 (with 추상클래스)

보배 진 2025. 10. 26. 22:32

 

 

 

 

 

 

 

 

 

 

🍧 인터페이스(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();
	}
}