Louie NRT Story

[프로그래밍] 객체구조 - 02 본문

전기차충전기

[프로그래밍] 객체구조 - 02

hyeok0724.kim@gmail.com 2021. 9. 26. 11:14
반응형

작성일: 21년 9월 25일

PS. 객체구조 - 01 https://louie0724.tistory.com/499

 

[프로그래밍] 객체구조 - 01

작성일: 21년 9월 25일 PS. Java 개발할 일이 생기면 다시 정리해보았음 일을 하면서 느끼는 것인데 혼자 개발할때는 객체지향으로 만들고 인터페이스 만들고 필요가 없다. 객체지향이라는 것이 방

louie0724.tistory.com

이것부터 보고 오면 도움이 될것이다.

객체언어는 항상 공부할 때마다 느끼지만 객체지향 언어로 많이 개발 안해본 티가 난다.

추상클래스 정의.pptx
0.04MB

 

 

Index

1. 청소팀 만들기

2. 과학실 청소팀 만들기

3. 추상클래스

4. 추상클래스와 인터페이스

 

 

1. 청소팀 만들기

 1) 코드 설명

  - 기존에 만들어놓은 방법이 너무 좋아서 팀을 만들기로 하였음

  - 하나의 교실 뿐 아니라 많은 교실들을 한번에 청소하기를 바람

  - 팀들은 교실이라는 하나의 공간을 공유하지 않기 때문에 스레드로 돌림

public class 교실청소팀{
    protected 교실 해당_교실;
    private 창문청소 창문팀원01, 창문팀원02;
    private 바닥청소 바닥팀원01;
    private 칠판청소 칠판팀원01;

    private 청소담당[] 팀원들{창문팀원01, 창문팀원02, 바닥팀원01, 칠판팀원01}

    public 교실청소팀(교실 해당_교실){
        this.해당_교실 = 해당_교실;
        창문팀원01 = new 창문청소();
        창문팀원02 = new 창문청소();
        바닥팀원01 = new 바닥청소();
        칠판팀원01 = new 칠판청소();
    }

    public 교실청소시작(){
        for(청소담당 팀원: 팀원들){
            팀원.청소_시작하기();
        }
    }
}

교실청소팀 청소1팀 = new 교실청소팀(101호);
교실청소팀 청소2팀 = new 교실청소팀(102호);
교실청소팀 청소3팀 = new 교실청소팀(103호);
교실청소팀 청소4팀 = new 교실청소팀(104호);
교실청소팀 청소5팀 = new 교실청소팀(105호);

Thread 쓰레드1 = new Thread(청소1팀);
Thread 쓰레드2 = new Thread(청소2팀);
Thread 쓰레드3 = new Thread(청소3팀);
Thread 쓰레드4 = new Thread(청소4팀);
Thread 쓰레드5 = new Thread(청소5팀);

 

 

2. 과학실 청소팀 만들기

 1) 문제점

  - 교실청소팀이 좋아서 그대로 가져와서 과학실 청소팀도 만들기를 원함

  - 교실청소팀을 복사해서 과학실청소팀을 만들면 되지만 만들고 보니 코드가 거의 동일함

  - 과학용품 청소 하는 한명의 사람만 추가하고 과학용품 청소 방법만 추가 하면됨

  - 하다보니깐 교실청소 방법이 개선되었을때 과학실청소팀도 개선해야 하기 때문에 2군대에서 수정해야함

 2) 해결방법

  - 교실청소팀을 그대로 상속받아서 과학실청소에 관련된 것만 추가 하면 됨

  - 교실청소팀이 바뀌더라도 그대로 상속받기 때문에 과학실청소는 신경 안써도 됨

  - 상속받는 다는 것은 어떻게 보면 "복사" 한다라고 생각하면 이해하는데 도움이 될 것 같음

 ※ 이러한 구조는 과학실 청소팀 뿐 아니라 음악실 청소팀, 미술실 청소팀도 만들 수 있음

public class 과학실청소팀 extends 교실청소팀{
    private 과학청소 과학팀원01;

    public 과학실청소팀(교실 해당_교실){
        super(해당_교실);
        과학팀원01 = new 과학청소();
    }

    public 과학청소시작(){
        super().교실청소시작
        과학팀원01.청소_시작하기();
    }
}

교실청소팀 청소1팀 = new 교실청소팀(101호);
교실청소팀 청소2팀 = new 교실청소팀(102호);
교실청소팀 청소3팀 = new 교실청소팀(103호);

과학청소팀 과청소1팀 = new 과학청소팀(과학1실);
과학청소팀 과청소2팀 = new 과학청소팀(과학2실);

Thread 쓰레드1 = new Thread(청소1팀);
Thread 쓰레드2 = new Thread(청소2팀);
Thread 쓰레드3 = new Thread(청소3팀);

Thread 쓰레드4 = new Thread(과청소1팀);
Thread 쓰레드5 = new Thread(과청소1팀);

 

 

3. 추상클래스

 1) 코드설명

  - 기존 창문청소, 바닥청소, 칠판청소 클래스는 비슷하기 때문에 중복되는 것이 많음

  - 책상청소를 만들게 됐을때 청소담당이라는 추상 클래스를 만들어 상속하면 개선 될것임

public abstract class 청소담당{
    protected 교실 해당_교실;

    public 지정교실(교실 해당_교실){
        this.해당_교실 = 해당_교실;
    }

    public abstract void 청소_시작하기()
}

public class 창문청소 extends 청소담당{

    private int 행주 = 100;
    private double 윈덱스_리터 = 10.0;

    public void 창문청소_시작하기(){
        if(담당_교실.창문 <= 100){
            if(행주 <= 10){
                빨아오기(행주);
            }
            if(인덱스_리터 <= 1){
                리필해오기(윈덱스_리터);
            }
            창문닦기(담당_교실, 행주_깨끗함, 윈덱스_리터);
        }
    }

    @override
    public void 청소_시작하기(){
        창문청소_시작하기();
    }
}

 

 

4. 추상클래스와 인터페이스

 - 게임으로 설명해준것이 가장 이해하기 쉬운것 같아서 직접 그림까지 그려가며 정리해보았음

 1) 추상 클래스

  - 설계서: 기획자가 생각했을때 직업에 대해서는 추상 클래스로 정의를 한것임

  - HP와 MP, 방어하기, 원거리 공격, 근거리 공격은 어떠한 직업이든 무조건 있어야 한다고 생각하여 넣어둔 것임

  - 기본 메소드는 사전에 정의하여 개발자가 바로 사용할수도 있고 아니면 오버라이딩 하여 다시 정의 할 수도 있음

  - 추상 클래스를 상속받으면 개발자는 무조건 다시 정의를 해야함

  - 기획자가 만들어 놓은 추상 클래스에 있는 추상 메소드를 개발자는 빼먹고 개발 안할 수가 없음

 2) 인터페이스

  - 설계서: 기획자가 무기들에 대한 기능들을 정의해 놓은 것임

  - 직업의 경우 직업A, 직업B 와 같이 2개가 될수 없음. 즉 오직 하나만 상속 받을 수 있음

  - 무기는 공격무기, 방어무기, 마법무기 등 여러개의 무기들을 상속 받을 수 있음

※ 추상클래스에서는 일반 함수를 직접 정의할 수 있음. 그래서 서로다른 기획자가 만든 직업A와 직업B 2개의 추상클래스를 상속 받으면 컴파일러에서는 방어하기()에 대해서 직업A의 것을 써야 할지 직업B의 것을 써야할지 혼란을 가져옴. 그래서 추상클래스는 무조건 하나만 상속 받을 수 있음. 하지만 인터페이스는 함수를 정의 하지 않기 때문에 혼란이 없음. 추상클래스는 오직 하나만 상속 받고 인터페이스는 여러개를 상속 받을 수 있음

반응형

'전기차충전기' 카테고리의 다른 글

[AWS] API Gateway Websocket - 02  (0) 2021.10.10
[AWS] API Gateway Websocket - 01  (0) 2021.10.04
[프로그래밍] 객체구조 - 01  (0) 2021.09.25
[everon] SWOT 분석 - Todo  (0) 2021.09.22
[everon] 재밌는 코드 이야기 - Todo  (0) 2021.09.22
Comments