개발의 시작과 끝

2020.05.03 / Day - 21 자바 11~15일차 복습 본문

풀스택/자바 공부, 복습

2020.05.03 / Day - 21 자바 11~15일차 복습

개발지혜 2020. 5. 3. 22:18

21일차

11일 - 상속을 통한 캐스팅

캐스팅 허용
class Main {
  public static void main(String[] args) {
    칼 a칼 = new 칼();
    a칼 = new 활();
  }
}

class 칼 { }
class 활 extends 칼 { }
상식적으로 활은 칼이 아니지만 칼을 상속받음으로써 코드 실행이 가능해진다.

매개변수 - 마지막 공격방식 기억
// 문제 : 매개변수를 사용해서 전사가 매번 다르게 공격하도록 해주세요.

class Main {
	public static void main(String[] args) {
		전사 a전사 = new 전사();

		a전사.공격("브라이언", "칼");
		// 브라이언이(가) 칼(으)로 공격합니다.

		a전사.재공격();
		// 브라이언이(가) 칼(으)로 공격합니다.

		a전사.공격("필립", "창");
		// 필립이(가) 창(으)로 공격합니다.

		a전사.공격("마크", "지팡이");
		// 마크(가) 지팡이(으)로 공격합니다.

		a전사.재공격();
		// 마크(가) 지팡이(으)로 공격합니다.

		a전사.재공격();
		// 마크(가) 지팡이(으)로 공격합니다.
	}
}

class 전사 {
	String 공격자명;
	String 무기명;

	void 공격(String 공격자명, String 무기명) {
		this.공격자명 = 공격자명;
		this.무기명 = 무기명;
		
		재공격();
	}

	void 재공격() {
		System.out.printf("%s(이)가 %s(으)로 공격합니다!\n", 공격자명, 무기명);
	}
}

 

12일 - 형변환, 구성

형변환
class Main {
	public static void main(String[] args) {
		페라리 a페라리 = new 페라리();
		자동차 a자동차;

		// 수동형변환, 수동캐스팅
		a자동차 = (자동차)a페라리;
		
		// 자동형변환, 자동캐스팅
		// 자바가 판단하기에 안전한 경우만 자동형변환이 가능하다.
		a자동차 = a페라리;
		
		페라리 a페라리2 = (페라리)a자동차;
	}
}

class 자동차 {
	void 달리다() {}
	void 서다() {}
}
class 페라리 extends 자동차 {
	void 뚜껑이_열리다() {}
}

구성
class Main {
  public static void main(String[] args) {
    사람 a사람 = new 사람();
    
    a사람.나이 = 20;
    a사람.a왼팔 = new 팔();
  }
}

class 사람 {
  // 클래스안에 변수를 정의 할 수 있다.
  int 나이;
  팔 a왼팔;
}

class 팔 {
  
}

 

13일 - abstract

class Main {
	public static void main(String[] args) {
		사람 a김철수 = new 김철수();
		사람 a김영희 = new 김영희();

		a김철수.배달_음식_주문하다();
		// 영화반점에서 김철수(010-1234-1234)에게 매운 짬뽕(을)를 배달합니다.

		a김영희.배달_음식_주문하다();
		// 북경반점에서 김영희(010-4321-4321)에게 안매운 짬뽕(을)를 배달합니다.

		a김영희.a좋아하는_음식점 = a김철수.a좋아하는_음식점;
		a김영희.선호하는_음식의_매운정도 = "아주 매운";
		a김영희.선호하는_음식 = "짜장";

		a김영희.배달_음식_주문하다();
		// 영화반점에서 김영희(010-4321-4321)에게 아주 매운 짜장(을)를 배달합니다.
	}
}

class 사람 {
	String 이름;
	String 전화번호;
	음식점 a좋아하는_음식점;
	String 선호하는_음식의_매운정도;
	String 선호하는_음식;

	void 배달_음식_주문하다() {
		a좋아하는_음식점.주문(이름, 전화번호, 선호하는_음식의_매운정도, 선호하는_음식);
	}
}

class 김철수 extends 사람 {
	김철수() {
		이름 = "김철수";
		전화번호 = "010-1234-1234";
		a좋아하는_음식점 = new 영화반점();
		선호하는_음식의_매운정도 = "매운";
		선호하는_음식 = "짬뽕";
	}
}

class 김영희 extends 사람 {
	김영희() {
		이름 = "김영희";
		전화번호 = "010-4321-4321";
		a좋아하는_음식점 = new 북경반점();
		선호하는_음식의_매운정도 = "안매운";
		선호하는_음식 = "짜장";
	}
}

abstract class 음식점 {
	String 이름;

	void 주문(String 주문자명, String 주문자_전화번호, String 음식, String 매운정도) {
		System.out.println(이름 + "에서 " + 주문자명 + "(" + 주문자_전화번호 + ")에게 " + 매운정도 + " " + 음식 + "(을)를 배달합니다.");
	}
}

class 영화반점 extends 음식점 {
	영화반점() {
		이름 = "영화반점";
	}
}

class 북경반점 extends 음식점 {
	북경반점() {
		이름 = "북경반점";
	}
}

 

 

14일 - 인력관리소

class Main {
	public static void main(String[] args) {
		사람인력관리소 a사람인력관리소 = new 사람인력관리소();
		a사람인력관리소.add사람("홍길순", 33);
		// 나이가 33살인 1번째 사람(홍길순)이 추가되었습니다.
		a사람인력관리소.add사람("홍길동", 20);
		// 나이가 20살인 2번째 사람(홍길동)이 추가되었습니다.
		a사람인력관리소.add사람("임꺽정", 30);
		// 나이가 30살인 3번째 사람(임꺽정)이 추가되었습니다.
		a사람인력관리소.add사람("임꺽순", 50);
		// 나이가 50살인 4번째 사람(임꺽순)이 추가되었습니다.
		a사람인력관리소.add사람("임선달", 52);
		// 나이가 52살인 5번째 사람(임선달)이 추가되었습니다.
		사람 a사람1 = a사람인력관리소.get사람(1);
		a사람1.자기소개();
		// 저는 1번, 홍길순, 33살 입니다.
		사람 a사람2 = a사람인력관리소.get사람(2);
		a사람2.자기소개();
		// 저는 2번, 홍길동, 20살 입니다.
		사람 a사람3 = a사람인력관리소.get사람(3);
		a사람3.자기소개();
		// 저는 3번, 임꺽정, 30살 입니다.
		사람 a사람4 = a사람인력관리소.get사람(4);
		a사람4.자기소개();
		// 저는 4번, 임꺽순, 50살 입니다.
		사람 a사람5 = a사람인력관리소.get사람(5);
		a사람5.자기소개();
		// 저는 5번, 임선달, 52살 입니다.
	}
}

class 사람인력관리소 {
	사람[] 사람들;
	int 마지막_사람_번호;
	사람인력관리소() {
		마지막_사람_번호 = 0;
		사람들 = new 사람[100];
	}
	void add사람(String 이름, int 나이) {
		int 번호 = 마지막_사람_번호 + 1;
		사람 a사람 = new 사람();
		a사람.번호 = 번호;
		a사람.이름 = 이름;
		a사람.나이 = 나이;
		사람들[번호 - 1] = a사람;
		System.out.printf("나이가 %d살인 %d번째 사람(%s)이 추가되었습니다.\n", 나이, 번호, 이름);
		마지막_사람_번호 = 번호;
	}
	사람 get사람(int 번호) {
		return 사람들[번호 - 1];
	}
}
class 사람 {
	int 번호;
	String 이름;
	int 나이;
	void 자기소개() {
		System.out.printf("저는 %d번, %s, %d살 입니다.\n", 번호, 이름, 나이);
	}
}

 

15일 - 전사 무기변경

class Main {
	public static void main(String[] args) {
		전사 a전사1 = new 전사();
		
		a전사1.a왼손무기 = new 칼();
		a전사1.공격();
		// 출력 => 전사가 왼손으로 칼(을)를 사용합니다.
		
		전사 a전사2 = new 전사();
		a전사2.a왼손무기 = new 창();
		a전사2.a오른손무기 = new 도끼();
		a전사2.공격();
		// 출력 => 전사가 왼손으로 창(을)를 사용합니다.
		// 출력 => 전사가 오른손으로 도끼(을)를 사용합니다.
	}
}

class 전사 {
	무기 a왼손무기;
	무기 a오른손무기;
	
	void 공격() {
		if ( a왼손무기 != null ) {
			a왼손무기.작동("전사", "왼손");
		}
		if ( a오른손무기 != null ) {
			a오른손무기.작동("전사", "오른손");
		}
	}
}

class 무기 {
	void 작동(String 사용자, String 사용부위) {
	}
}

class 칼 extends 무기 {
	void 작동(String 사용자, String 사용부위) {
		System.out.println(사용자 + "가 " + 사용부위 + "으로 칼(을)를 사용합니다.");
	}
}

class 창 extends 무기 {
	void 작동(String 사용자, String 사용부위) {
		System.out.println(사용자 + "가 " + 사용부위 + "으로 창(을)를 사용합니다.");
	}
}

class 도끼 extends 무기 {
	void 작동(String 사용자, String 사용부위) {
		System.out.println(사용자 + "가 " + 사용부위 + "으로 도끼(을)를 사용합니다.");
	}
}