20
“Object Programming(3)” 객객객객 객객객객객 (3)

Java mentoring of samsung scsc 3

  • Upload
    -

  • View
    152

  • Download
    0

Embed Size (px)

Citation preview

“Object Programming(3)”객체지향 프로그래밍 (3)

1. Abstract, Interface

Object

Object 프로그래밍은 세상에 있는 정보들을 효율적으로 담기 위하여 만들어졌다 .

객체지향의 4 대 특징

추상화

다형성캡슐화

상속성

캡슐화 (Cabsulate)

Tell Don’t ask데이터를 묻지말고 기능을 실행

Method 에서 생성한 객체의 Method 만 호출Parameter 로 받은 객체의 Method 만 호출

필드를 참조하는 객체의 Method 만 호출

Method &Vari-ables

Class

캡슐화 (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 Cold-Patient();

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();};

}

캡슐화 (Cabsulate)

코감기는 항상 콧물 , 재채기 , 코막힘을 동반한다 .

class SinivelCap class SneezeCap class SnuffleCap

복용 순서는 SinivelCap, SneezeCap, SnuffleCap 순이다 .

IF순서대로 복용하지 않을시 큰일이 벌어진다면 ?

“ 상관 관계를 매우 잘 알아야하는 문제에 놓였다”

캡슐화 (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();

}

}

외부에서 약물이 수정되어서는 안된다 !

순서대로 복용이 지켜질수 밖에 없다 .

상속성 (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;

}

셋다 동물이다 !

상속성 (Extends)

동물

중복없이 기능들을 재사용할수 없을까 ?

상속성 (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

stubeye = true;ear = true;nose = true;name = " 고양이 ";

} @Overridevoid move() {super.move()}

}

class 강아지 extends 동물 {public 강아지 () {

// TODO Auto-generated constructor stubeye = true;ear = true;nose = true;name = " 강아지 ";

} @Overridevoid move() {super.move()}

}

class 곰 extends 동물 {public 곰 () {

// TODO Auto-generated constructor stubeye = true;ear = true;nose = true;name = " 곰 ";

} @Overridevoid move() {super.move()}

}

다형성 (polymophizem)

고양이 , 강아지 , 곰은 동물을 상속받기에동물의 이름으로써 고양이 강아지 곰의 메소드를 쓸수있다 .

public class Ground {public static void main(String[] args) {

동물 야옹이 = new 고양이 ();동물 멍멍이 = new 강아지 ();동물 곰팅이 = new 곰 ();

}}

상속성 (Extends)

동물

동물들은 걸어다닐수 있지만 짖기도 한다 .모두 다르게 짖는데 어떻게 할수있을까 ?

추상클래스상속 받을시 반듯이 재정의 하여야하는 클래스

추상 메서드를 가지고 있다 .

상속 받았을때 내가 원하는 것을 반듯이 재정의하여 쓸수 있게

할 수는 없을까 ????

abstract class 동물 {boolean eye;boolean ear;boolean nose;String name;void move() {

System.out.println(" 움직입니다 .");}

abstract void bark();}

추상클래스

Class Cat extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){super.-move()}@Overridevoid bark(){ };

}

Class Bear extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){su-per.move()}@Overridevoid bark(){ };

}

Class Dog extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){su-per.move()}@Overridevoid bark(){ };

}

모두 다르게 짖기에 알아서 정의해 쓰시오 !

인터페이스

동물

눈 O코 O귀 O걷다 O수영 X

눈 O코 O귀 O걷다 O수영 X

눈 O코 O귀 O걷다 O수영 X

눈 O코 O귀 O걷다 O수영 O

오리는 동물이다 . 하지만 고양이 , 곰 , 강아지는 수영을 못하지만오리는 수영을 할수있다 . 객체지향 설계에 문제가 생기기 시작한다 !

인터페이스

interface 수영 {boolean swim_check = false;void swimming(boolean swim_check);

}

오리는 수영을 할수있다 ! 그렇기에수영이라는 Interface 를 만든다

Interface 는 추상 메서드를 가지고있는 Class 이다 .오직 추상 메서드만을 가질수 있다 .

인터페이스

interface 수영 {boolean swim_check = false;void swimming(boolean swim_check);

}

오리는 수영을 할수있다 ! 그렇기에수영이라는 Interface 를 만든다

Interface 는 추상 메서드를 가지고있는 Class 이다 .오직 추상 메서드만을 가질수 있다 .

인터페이스class 오리 extends 동물 implements 수영 {

public 오리 () {// TODO Auto-generated con-

structor stubeye = true;ear = true;nose = true;name = " 오리 ";

}@Overridevoid move() { super.move();}@Overridevoid bark() {}@Overridepublic void swimming(boolean swim_check) {}

}

감사합니다 .