빅데이터 서비스 교육/Java

Java OOP

Manly 2022. 5. 6. 08:23
반응형

 

 

Object - Field, Method

 

Class클래스 : 실제 Object를 제작하기 전 설계하는 도면


  -하나의 클래스로 여러 객체를 만들 수 있다.

 

 

 

 

객체지향 프로그래밍의 특징

 

추상화(Abstract)
 -객체에서 공통된 속성과 행위를 추출하는 기법
 -코드상에서 구현(로직)부분을 제외한 오직 선언 부분만을 설계
 -상세한 정보는 무시하고 필요한 정보들만 간추려서 구성
                                               
캡슐화(Encapsulation): 데이터와 로직을 하나로 묶고 외부로부터 내 데이터를 숨긴다.                           +정보은닉
 - 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현내용을 외부로부터
   감추는 기법(정보은닉)
 - 만일의 상황(타인이 외부에서 조작)을 대비해서 특정 속성이나 메소드를 
   사용자가 조작할 수 없도록 숨겨 놓은것.
 - 외부에서는 공개된 메소드(기능)의 인터페이스를 통해 접근할 수 있다.
       ex)sc.nextInt() 

상속(Inheritance)
 - 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)
   를 생성하는 기법
 - 기존코드를 그대로 재사용하거나 재정의 -> 재사용 + 확장
-> 상위클래스 일수록 추상적 하위클래스로 갈수록 구체적이다.

다형성(Polymorphism)
 - 사전적 의미: 다양한 형태로 나타날 수 있는 능력
 - 같은기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것
 - 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.
 ex)하나의 리모콘이 tv 빔프로젝트 등등에서 쓸 수 있는것
 

 객체지향 프로그래밍의 장점
 - 신뢰성 있는 소프트웨어를 쉽게 작성할 수 있다.
 - 코드를 재사용하기 쉽다.
 - 유지보수가 용이하다.
 - 직관적인 코드 분석이 가능하다.
 - 소프트웨어 생산성이 향상된다.
 

 

 

포켓몬 게임 예제

 

Main

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		// 실행공간
		Pokemon kkobuk = new Pokemon("꼬부기", "물", "물대포", 500, 100);
		Pokemon pika = new Pokemon("피카츄", "번개", "백만볼트", 3000, 250);

		
		while (true) {
			System.out.println("포켓몬을 선택하세요.");
			System.out.print("[1] 꼬부기 [2]피카츄 >>");
			int choice = sc.nextInt();

			if (choice == 1) {
				// 꼬부기가 피카츄를 공격
				System.out.println("공격을 선택하세요");
				System.out.print("[1]일반공격 [2]스킬 >> ");
				int choiceAtk = sc.nextInt();
				// 1. 일반공격을 선택했다면, 피카츄의 hp를 꼬부기의 공격력 만큼 감소
				if(choiceAtk == 1) {
					pika.setHp(pika.getHp()-kkobuk.getAtk());
				// 2. 두마리 포켓몬의 hp를 출력
					System.out.println("피카츄hp : "+pika.getHp()+"꼬부기hp : "+kkobuk.getHp());
				// 3. 스킬을 선택했다면, 피카츄의 hp를 꼬부기의 공격력 1.5배만큼 감소
				}else if(choiceAtk == 2) {
					pika.setHp(pika.getHp()-(int)(1.5*kkobuk.getAtk()));
					// 4. 꼬부기의 스킬을 출력
					System.out.println(kkobuk.getSkill());
				}				
				
				// 5. 두마리 포켓몬의 hp 출력
				System.out.println(pika.getHp()+"   "+kkobuk.getHp());
				
			} else if (choice == 2) {
				// 피카츄가 꼬부기를 공격
				System.out.println("공격을 선택하세요");
				System.out.print("[1]일반공격 [2]스킬 >> ");
				int choiceAtk = sc.nextInt();
				// 1. 일반공격을 선택했다면, 꼬부기의 hp를 피카츄의 공격력 만큼 감소
				if(choiceAtk == 1) {
					kkobuk.setHp(kkobuk.getHp()-pika.getAtk());
					// 2. 두마리 포켓몬의 hp를 출력
					System.out.println("피카츄hp : "+pika.getHp()+"꼬부기hp : "+kkobuk.getHp());
					// 3. 스킬을 선택했다면,꼬부기의 hp를 피카츄의 공격력 1.5배만큼 감소
				}else if(choiceAtk == 2) {
					kkobuk.setHp(kkobuk.getHp()-(int)(1.5*pika.getAtk()));
					// 4. 피카츄의 스킬을 출력
					System.out.println(pika.getSkill());
				}
				// 5. 두마리 포켓몬의 hp 출력
				System.out.println("피카츄hp : "+pika.getHp()+"꼬부기hp : "+kkobuk.getHp());
				
			} else {

				System.out.println("잘못된 숫자를 입력하셨습니다.");
			}
			// 6. 둘중 한마리의 hp가 0보다 작거나 같을때 프로그램 종료
			if(kkobuk.getHp()<=0 || pika.getHp()<=0) {
				// 7. 승자가 누구인지 출력
				if(kkobuk.getHp()<=0) {
					System.out.println("승자는 피카츄");
				}else if(pika.getHp()<=0) {
					System.out.println("승자는 꼬부기");
				}
				break;
				}
			
					
		}

	}

 

Class

	private String name;
	private String type;
	private String skill;
	private int hp;
	private int atk;
	
	// 모든 필드의 값을 매개변수로 받아와서 객체를 생성하는 순간 채워주는 생성자 하나 만들기
	public Pokemon(String name, String type, String skill, int hp, int atk) {
		this.name = name;
		this.type = type;
		this.skill = skill;
		this.hp = hp;
		this.atk = atk;
	}

	// name, type, skill, hp, atk -> getter 메소드
	// hp, atk -> setter 메소드
	
	public int getHp() {
		return hp;
	}

	public void setHp(int hp) {
		this.hp = hp;
	}

	public int getAtk() {
		return atk;
	}

	public void setAtk(int atk) {
		this.atk = atk;
	}

	public String getName() {
		return name;
	}

	public String getType() {
		return type;
	}

	public String getSkill() {
		return skill;
	}

 

반응형

'빅데이터 서비스 교육 > Java' 카테고리의 다른 글

Java 상속  (0) 2022.05.06
Java Arraylist  (0) 2022.05.06
Java 메소드  (0) 2022.05.03
Java 배열  (0) 2022.05.03
Java 반복문  (0) 2022.05.02