




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 |