본문 바로가기
Java

2022-09-16 자바

by allwing12 2022. 9. 16.
package com.example.MyJavaProject;
// 문제 : 아래코드가 실행되도록 해주세요.

class Main {
    public static void main(String[] args) {
        사람[] 사람들 = new 사람[5];
        사람들[0] = 사람.get사람();
        사람들[1] = 사람.get사람();
        사람들[2] = 사람.get사람();
        사람들[3] = 사람.get사람();
        사람들[4] = 사람.get사람();

        for ( int i = 0; i < 사람들.length; i++ ) {
            사람들[i].자기소개();
        }

		/*
		// 출력
		저는 1번째 사람입니다.
		저는 2번째 사람입니다.
		저는 3번째 사람입니다.
		저는 4번째 사람입니다.
		저는 5번째 사람입니다.
		*/
    }
}

class 사람 {
    private static int 사람수;
    private int 번호;
    
    static {
        사람수 = 0;
    }
    private 사람(int 번호) {
        this.번호 = 번호;
    }
    public static 사람 get사람() {
        사람 a사람 = new 사람(사람수+1);
        사람수++;
        return a사람;
    }
    public void 자기소개 () {
        System.out.println("저는 " + 번호 + " 번째 사람입니다.");
    }
}

 

... 어떻게 뭘 정리해야할지 모르겠다 일단 그냥 내가 이해를 못했다...

일단 특별한 일이 없으면 private를 사용을 하는 걸로 하고 사람 class 를 위주로 보면 되는데

사람 class가 계속 도는 이유는 main class에 있는 for문 때문에 계속 도는 것 같다.

사람수의 초기값을 0으로 하고 +1을 한 이유는 0번째 배열일 때 출력은 1로 출력이 되야하니까

0 + 1 을 해서 1이 출력이 되게 한거라고 보면 된다 그리고 return 값으로 a사람을 계속 한거다.

사실 뭔소린지 잘 모르겠다 진짜

 

package com.example.MyJavaProject;
// 문제 : 아래코드가 실행되도록 해주세요.

class Main {
    public static void main(String[] args) {
        사람[] 사람들 = new 사람[7];
        사람들[0] = 사람.get사람();
        사람들[1] = 사람.get사람();
        사람들[2] = 사람.get사람();
        사람들[3] = 사람.get사람();
        사람들[4] = 사람.get사람();
        사람들[5] = 사람.get사람();
        사람들[6] = 사람.get사람();

        for ( int i = 0; i < 사람들.length; i++ ) {
            사람들[i].자기소개();
        }

		/*
		// 출력
		저는 1번째 사람입니다.
		저는 2번째 사람입니다.
		저는 3번째 사람입니다.
		저는 3번째 사람입니다.
		저는 3번째 사람입니다.
		저는 3번째 사람입니다.
		저는 3번째 사람입니다.
		*/
    }
}

class 사람 {
    private static int 사람수;
    private int 번호;
    private static 사람 a사람;

    static {
        사람수 = 0;
    }
    private 사람(int 번호) {
        this.번호 = 번호;
    }
    public static 사람 get사람() {
        if(사람수 < 3) {
            a사람 = new 사람(사람수+1);
            사람수++;
        }
        return a사람;
    }
    public void 자기소개 () {
        System.out.println("저는 " + 번호 + " 번째 사람입니다.");
    }
}

 

이건 위의 코드에서 배열을 7개 까지 늘리고 출력이 1,2,3,3,3,3이 되어야하는 문제인데

public static 사람 get사람 에서 if문을 사용해서 3보다 작을 때 까지 사람 객체를 생성하고

3부터는 계속 객체 생성 없이 a사람만 출력을 하게 해놓은 코드이다.

결국엔 사람 객체에 똑같은 사람만 계속 넣는거라고 생각하면 될 것 같다.

 

package com.example.MyJavaProject;
// 문제 : 아래코드가 실행되도록 해주세요.

class Main {
    public static void main(String[] args) {
        오리 a청둥오리 = 오리공장.get("청둥");
        오리 a흰오리 = 오리공장.get("흰");
        오리 a고무오리 = 오리공장.get("고무");
        오리 a고무2오리 = 오리공장.get("고무2");
        오리 a로봇오리 = 오리공장.get("로봇");


        a청둥오리.날다();
        // 출력 : 청둥오리 : 날개로 날아갑니다.
        a청둥오리.울다();
        // 출력 : 청둥오리 : 꽥꽥!!

        a흰오리.날다();
        // 출력 : 흰오리 : 날개로 날아갑니다.
        a흰오리.울다();
        // 출력 : 흰오리 : 꽥꽥!!

        a고무오리.날다();
        // 출력 : 고무오리 : 저는 날 수 없어요. ㅠㅠ
        a고무오리.울다();
        // 출력 : 고무오리 : 삑!삑!

        a고무2오리.날다();
        // 출력 : 고무오리 : 저는 날 수 없어요. ㅠㅠ
        a고무2오리.울다();
        // 출력 : 고무오리 : Peek!Peek!

        a로봇오리.날다();
        // 출력 : 로봇오리 : 로켓파워로 날아갑니다!!
        a로봇오리.울다();
        // 출력 : 로봇오리 : 기계는 울 수 없습니다.

        a고무2오리.set비행아이템(new 로켓날개비행아이템());
        a고무2오리.날다();
        // 출력 : 고무오리 : 로켓파워로 날아갑니다!!
    }
}

class 오리 {
    protected String 종류;
    protected 비행아이템 a비행아이템;
    protected 울음아이템 a울음아이템;

    public void set종류(String 종류) {
        this.종류 = 종류;
    }
    public String get종류() {
        return 종류;
    }

    void 날다() {
        a비행아이템.사용(종류);
    }
    void 울다() {
        a울음아이템.사용(종류);
    }
    void set비행아이템(비행아이템 a비행아이템) {
        this.a비행아이템 = a비행아이템;
    }
    void set울음아이템(울음아이템 a울음아이템) {
        this.a울음아이템 = a울음아이템;
    }
}

//class 흰오리 extends 오리{
//    흰오리() {
//        종류 = "흰오리";
//        a비행아이템 = new 날개비행아이템();
//        a울음아이템 = new 꽥꽥울음아이템();
//    }
//}
//
//class 고무오리 extends 오리{
//    고무오리() {
//        종류 = "고무오리";
//        a비행아이템 = new 못나는비행아이템();
//        a울음아이템 = new 삑삑울음아이템();
//    }
//}
//
//class 고무2오리 extends 오리{
//    고무2오리() {
//        종류 = "고무2오리";
//        a비행아이템 = new 못나는비행아이템();
//        a울음아이템 = new PeekPeek울음아이템();
//    }
//}
//
//class 로봇오리 extends 오리{
//    로봇오리() {
//        종류 = "로봇오리";
//        a비행아이템 = new 로켓날개비행아이템();
//        a울음아이템 = new 기계울음아이템();
//    }
//}

interface 아이템 {
    public void 사용(String 사용자);
}

interface 비행아이템 extends 아이템 {

}

interface 울음아이템 extends 아이템 {

}

class 날개비행아이템 implements 비행아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 날개로 날아갑니다.");
    }
}

class 못나는비행아이템 implements 비행아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 저는 날 수 없어요.ㅠㅜ");
    }
}

class 로켓날개비행아이템 implements 비행아이템{
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 로켓파워로 날아갑니다.");
    }
}

class 꽥꽥울음아이템 implements 울음아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 꽥꽥");
    }
}

class 삑삑울음아이템 implements 울음아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 삑삑");
    }
}

class PeekPeek울음아이템 implements 울음아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": PeekPeek");
    }
}

class 기계울음아이템 implements 울음아이템 {
    public void 사용(String 사용자) {
        System.out.println(사용자 + ": 기계는 울 수 없습니다.");
    }
}


class 오리공장 {
    public static 오리 get(String 종류) {
        오리 a오리 = new 오리();
        a오리.set종류(종류);
        if( 종류.equals("청둥") ) {
            a오리.set비행아이템(new 날개비행아이템());
            a오리.set울음아이템(new 꽥꽥울음아이템());
        } else if( 종류.equals("흰") ) {
            a오리.set비행아이템(new 날개비행아이템());
            a오리.set울음아이템(new 꽥꽥울음아이템());
        } else if( 종류.equals("고무") ) {
            a오리.set비행아이템(new 못나는비행아이템());
            a오리.set울음아이템(new 삑삑울음아이템());
        } else if( 종류.equals("고무2") ) {
            a오리.set비행아이템(new 못나는비행아이템());
            a오리.set울음아이템(new PeekPeek울음아이템());
        } else if( 종류.equals("로봇") ) {
            a오리.set비행아이템(new 로켓날개비행아이템());
            a오리.set울음아이템(new 기계울음아이템());
        }

        return a오리;
    }

}

 

 

이건 흰오리,고무오리 등의 class 를 주석처리를 해놨는데 주석처리 없애고도 풀 수 있기는 하다

근데 위의 코드는 class 오리공장이라는 것을 만들어서 다른 오리의 종류가 더 생기거나

똑같은 종류의 오리가 더 생겨도 class를 만들지 않고 else if 를 통해서 추가만 하면 되는 코드를 사용해서

문제를 푼거라고 하는데 일단 자바 디자인 패턴에 대해서 먼저 알아봐야할 것 같다.

솔직히 뭔소린지 정말 모르겠다.

 

 

댓글