인터페이스와 상속을 활용한 예제(Pattern)

JK·2022년 12월 24일
0

JAVA

목록 보기
17/28
post-thumbnail

interface와 implements받은 클래스

1. GetImpl(수당에 대한 인터페이스)

package strategy3_quiz.interfaces;

public interface GetImpl {
	public void get();
}

2. GetSalary(월급)

package strategy3_quiz.interfaces;

public class GetSalary implements GetImpl {

	@Override
	public void get() {
		System.out.println("월급을 받습니다");
	}
}

3. GetStudentPay(교육급여)

package strategy3_quiz.interfaces;

public class GetStudentPay implements GetImpl {

	@Override
	public void get() {
		System.out.println("교육급여를 받습니다");
	}
}

1. JobImpl(하는일에 대한 인터페이스)

package strategy3_quiz.interfaces;

public interface JobImpl {
	public void job();
}

2. JobLec(강사)

package strategy3_quiz.interfaces;

public class JobLec implements JobImpl {

	@Override
	public void job() {
		System.out.println("강의를 합니다");
	}
}

3. JobMng(직원)

package strategy3_quiz.interfaces;

public class JobMng implements JobImpl {

	@Override
	public void job() {
		System.out.println("학원운영업무를 합니다");
	}
}

4. JobStudy(학생)

package strategy3_quiz.interfaces;

public class JobStudy implements JobImpl {

	@Override
	public void job() {
		System.out.println("수업을 듣습니다");
	}
}

modularization

  • 추상클래스인 Person을 만들고 각 역할에 따라 상속받은 클래스를 만든다

1. Person

package strategy3_quiz.modularization;

import strategy3_quiz.interfaces.GetImpl;   //인터페이스 import
import strategy3_quiz.interfaces.JobImpl;

public abstract class Person {		//데이터
	private String id;
	private String name;
	private GetImpl get;
	private JobImpl job;
	
	public Person(String id, String name) {
		this.id = id;
		this.name = name;
	}
	
	public void get() {
		System.out.print(name + "은 ");
		get.get();
	}
	public void job() {
		System.out.print(name + "은 ");
		job.job();
	}
	public void print() {
		System.out.print("[id]" + id + "[name]" + name);
	}
	
	public void setGet(GetImpl get) {
		this.get = get;
	}
	public void setJob(JobImpl job) {
		this.job = job;
	}
}

2. Lecturer(강사)

package strategy3_quiz.modularization;

import strategy3_quiz.interfaces.GetSalary;
import strategy3_quiz.interfaces.JobLec;

public class Lecturer extends Person {

	private String subject;
	public Lecturer(String id, String name, String subject) {
		super(id, name);
		setGet(new GetSalary());
		setJob(new JobLec());
		this.subject = subject;
	}
	@Override
	public void print() {
		super.print();
		System.out.println("[강의과목]" + subject);
	}
}

3. Staff(직원)

package strategy3_quiz.modularization;

import strategy3_quiz.interfaces.GetSalary;
import strategy3_quiz.interfaces.JobMng;

public class Staff extends Person {
	private String part;

	public Staff(String id, String name, String part) {
		super(id, name);
		setGet(new GetSalary());
		setJob(new JobMng());
		this.part = part;
	}
	@Override
	public void print() {
		super.print();
		System.out.println("[부서]" + part);
	}
}

4. Student(학생)

package strategy3_quiz.modularization;

import strategy3_quiz.interfaces.GetStudentPay;
import strategy3_quiz.interfaces.JobStudy;

public class Student extends Person {
	
	private String ban;
	public Student(String id, String name, String ban) {
		super(id, name);
		setGet(new GetStudentPay());
		setJob(new JobStudy());
		this.ban = ban;
	}
	@Override
	public void print() {
		super.print();
		System.out.println("[반]" + ban);
	}
}

5. Testmain

  • 강사, 직원, 학생 데이터 넣기
  • 데이터 배열에 나열 후 for문으로 출력
package strategy3_quiz.modularization;

public class TestMain {

	public static void main(String[] args) {
		Student st1 = new Student("ere", "홍길동", "국비자바");
		Student st2 = new Student("dbd", "김길동", "자바단기");
		Lecturer l1 = new Lecturer("aaa", "유길동", "빅데이터");
		Lecturer l2 = new Lecturer("bdc", "박길동", "웹프로그래밍");
		Staff s1  = new Staff("sss", "유용현", "관리");
		Person[] person = {st1, st2, l1, l2, s1};
		System.out.println("업무시간이니 일합시다");

		for(Person p : person) {
			 p.job();
		}
		System.out.println("---------------------");
		System.out.println("지급받아요");
		for(int i=0 ; i<person.length ; i++) {
			person[i].get();
		}
		System.out.println("---------------------");
		for(Person p : person) {
			//System.out.println(p);
			p.print(); 
		}
	}
}

결과

업무시간이니 일합시다
홍길동은 수업을 듣습니다
김길동은 수업을 듣습니다
유길동은 강의를 합니다
박길동은 강의를 합니다
유용현은 학원운영업무를 합니다
---------------------
지급받아요
홍길동은 교육급여를 받습니다
김길동은 교육급여를 받습니다
유길동은 월급을 받습니다
박길동은 월급을 받습니다
유용현은 월급을 받습니다
---------------------
[id]ere[name]홍길동[반]국비자바
[id]dbd[name]김길동[반]자바단기
[id]aaa[name]유길동[강의과목]빅데이터
[id]bdc[name]박길동[강의과목]웹프로그래밍
[id]sss[name]유용현[부서]관리
profile
씨앗 개발자

0개의 댓글