5. 캡슐화(Cabsulate)
Tell Don’t ask
데이터를 묻지말고 기능을 실행
Method에서 생성한 객체의 Method 만 호출
Parameter로 받은 객체의 Method만 호출
필드를 참조하는 객체의 Method만 호출
Method
&
Variables
Class
6. 캡슐화(Cabsulate)
class SinivelCap {
void Task() {
System.out.println("콧물이 멈추
기 시작합니다..");
}
}
class SneezeCap {
void Task() {
System.out.println("재채기가 멈
추기 시작합니다..");
}
}
class SnuffleCap {
void Task() {
System.out.println("코가 뚫리기
시작합니다...");
}
}
public class ColdPatient {
public static void main(String[] args) {
ColdPatient cp = new
ColdPatient();
SinivelCap 콧물 = new
SinivelCap() ;
SneezeCap 재채기 = new
SneezeCap() ;
SnuffleCap 코가뻥 = new
SnuffleCap();
cp.TaskSinivelCap(콧물);
cp.TaskSneezeCap(재채기);
cp.TaskSnuffleCap(코가뻥);
}
void TaskSinivelCap(SinivelCap 콧물) {콧
물.Task();};
void TaskSneezeCap(SneezeCap 재채기)
{재채기.Task();};
void TaskSnuffleCap(SnuffleCap 코가뻥)
{코가뻥.Task();};
7. 캡슐화(Cabsulate)
코감기는 항상 콧물, 재채기, 코막힘을 동반한다.
class SinivelCap
class SneezeCap
class SnuffleCap
복용 순서는 SinivelCap, SneezeCap, SnuffleCap 순이다.
IF
순서대로 복용하지 않을시 큰일이 벌어진다면?
8. 캡슐화(Cabsulate)
public class ColdPatient {
public static void main(String[] args) {
Contac600 contack = new
Contac600();
ColdPatient cp = new
ColdPatient();
cp.Task(contack);
}
void Task(Contac600 contack) {
contack.Task();
}
}
class Contac600 {
private SinivelCap 콧물;
private SneezeCap 재채기;
private SnuffleCap 코가뻥;
public Contac600() {
// TODO Auto-generated
constructor stub
콧물 = new SinivelCap() ;
재채기 = new SneezeCap() ;
코가뻥 = new SnuffleCap();
}
void Task() {
콧물.Task();
재채기.Task();
코가뻥.Task();
}
}
외부에서 약물이 수정되
어서는 안된다!
순서대로 복용이 지켜질
수 밖에 없다.
9. 상속성(Extends)
Class Cat {
boolean eye;
boolean ear;
boolean nose;
String name;
}
Class Bear {
boolean eye;
boolean ear;
boolean nose;
String name;
}
Class Dog {
boolean eye;
boolean ear;
boolean nose;
String name;
}
11. 상속성(Extends)
public class Ground {
public static void main(String[] args) {
고양이 야옹이 = new 고양이();
강아지 멍멍이 = new 강아지();
곰 곰팅이 = new 곰();
}
}
class 동물 {
boolean eye;
boolean ear;
boolean nose;
String name;
void move() {
System.out.println("움직입니다.");
}
}
class 고양이 extends 동물{
public 고양이() {
// TODO Auto-generated constructor stub
eye = true;
ear = true;
nose = true;
name = "고양이";
}
@Override
void move() {super.move()}
}
class 강아지 extends 동물{
public 강아지() {
// TODO Auto-generated constructor stub
eye = true;
ear = true;
nose = true;
name = "강아지";
}
@Override
void move() {super.move()}
}
class 곰 extends 동물{
public 곰() {
// TODO Auto-generated constructor stub
eye = true;
ear = true;
nose = true;
name = "곰";
}
@Override
void move() {super.move()}
}
12. 다형성(polymophizem)
고양이, 강아지, 곰은 동물을 상속받기에
동물의 이름으로써 고양이 강아지 곰의 메소드를 쓸수있다.
public class Ground {
public static void main(String[] args) {
동물 야옹이 = new 고양이();
동물 멍멍이 = new 강아지();
동물 곰팅이 = new 곰();
}
}
14. 추상클래스
상속 받을시 반듯이 재정의 하여야하는 클래스
추상 메서드를 가지고 있다.
abstract class 동물 {
boolean eye;
boolean ear;
boolean nose;
String name;
void move() {
System.out.println("움직입니다.");
}
abstract void bark();
}
15. 추상클래스
Class Cat extends 동물{
boolean eye;
boolean ear;
boolean nose;
String name;
@Override
void
move(){super.move()}
@Override
void bark(){ };
}
Class Bear extends 동물 {
boolean eye;
boolean ear;
boolean nose;
String name;
@Override
void
move(){super.move()}
@Override
void bark(){ };
Class Dog extends 동물 {
boolean eye;
boolean ear;
boolean nose;
String name;
@Override
void
move(){super.move()}
@Override
void bark(){ };
모두 다르게 짖기에 알아서 정의해 쓰시오!
16. 인터페이스
눈 O
코 O
귀 O
걷다 O
수영 X
눈 O
코 O
귀 O
걷다 O
수영 X
눈 O
코 O
귀 O
걷다 O
수영 X
눈 O
코 O
귀 O
걷다 O
수영 O
오리는 동물이다. 하지만 고양이, 곰, 강아지는 수영을 못하지만
오리는 수영을 할수있다. 객체지향 설계에 문제가 생기기 시작한다!
17. 인터페이스
interface 수영 {
boolean swim_check = false;
void swimming(boolean swim_check);
}
오리는 수영을 할수있다! 그렇기에
수영이라는 Interface를 만든다
Interface는 추상 메서드를 가지고있는 Class이다.
오직 추상 메서드만을 가질수 있다.
18. 인터페이스
interface 수영 {
boolean swim_check = false;
void swimming(boolean swim_check);
}
오리는 수영을 할수있다! 그렇기에
수영이라는 Interface를 만든다
Interface는 추상 메서드를 가지고있는 Class이다.
오직 추상 메서드만을 가질수 있다.
19. 인터페이스
class 오리 extends 동물 implements 수영{
public 오리() {
// TODO Auto-generated constructor
stub
eye = true;
ear = true;
nose = true;
name = "오리";
}
@Override
void move() { super.move();
}
@Override
void bark() {
}
@Override
public void swimming(boolean swim_check) {
}
}