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 를 통해서 추가만 하면 되는 코드를 사용해서
문제를 푼거라고 하는데 일단 자바 디자인 패턴에 대해서 먼저 알아봐야할 것 같다.
솔직히 뭔소린지 정말 모르겠다.
'Java' 카테고리의 다른 글
| 2022-09-30 자바 (최대값 구하기) (0) | 2022.09.30 |
|---|---|
| 2022-09-30 자바(숫자만 뽑은 후 더하기) (1) | 2022.09.30 |
| 2022-09-14 자바 (접근 제어자, getter/setter, 에러처리) (0) | 2022.09.14 |
| 2022-09-13 자바 수업 (interface,implements) (0) | 2022.09.13 |
| 2022-09-08 자바 (0) | 2022.09.08 |
댓글