22
1 작성자 : 기노현 작성부서 : 정보기술연구소 이메일 : [email protected] 전화 / 팩스 : 062-653-2879 / 062-676- 4869 2014 년 5 월 14 일 객체지향 프로그래밍 객체지향 프로그래밍 (Object Oriented Programming) (Object Oriented Programming)

[강의] OOP 개요

Embed Size (px)

DESCRIPTION

객체지향 프로그래밍 개요

Citation preview

Page 1: [강의] OOP 개요

1

작성자 : 기노현

작성부서 : 정보기술연구소

이메일 : [email protected]

전화 /팩스 : 062-653-2879 / 062-676-4869

2014 년 5 월 14 일

객체지향 프로그래밍객체지향 프로그래밍(Object Oriented Programming)(Object Oriented Programming)

Page 2: [강의] OOP 개요

2 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민

• 좋은 소프트웨어란 ?– 사용자의 요구사양이 정확하게 반영되어 있어야 한다 .

– 소프트웨어에 포함되어 있는 잠재적인 에러가 가능한 적어야한다 .

– 개발비용 이내에 만들어져야 한다 .

– 개발된 소프트웨어는 운영하기 쉽고 유지보수가 쉬워야 한다 .

– 안전성 (Safety) 과 보안성 (Security) 이 높아야 한다 .

– 시간과 자원 효율이 좋아야 한다 .

– 소프트웨어의 구성이나 설계구조가 알기 쉬워야 한다 .

– 소프트웨어는 검사하기가 쉬워야 한다 .

– 소프트웨어와 관련된 고품질의 문서가 존재해야 한다 .

OOP OOP 개요개요

Page 3: [강의] OOP 개요

3 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민

• 좋은 소프트웨어란 ?

OOP OOP 개요개요

고객이 원하는 기능을 제공하는소프트웨어

고객이 원하는 기능을 제공하는소프트웨어

객체지향 기본 원리를 통한유연한 소프트웨어

객체지향 기본 원리를 통한유연한 소프트웨어

유지보수와 재사용이 쉬운소프트웨어

유지보수와 재사용이 쉬운소프트웨어

Page 4: [강의] OOP 개요

4 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• Good Software 인증시 평가 항목

Page 5: [강의] OOP 개요

5 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 어떤 코드로 작성

[ 메뉴영역 ]

메뉴 1

메뉴 2

[ 공통버튼 영역 ]

[ 화면 영역 ]

버튼 1

Page 6: [강의] OOP 개요

6 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 디자인 1

시작

메뉴 1 실행 ?

메뉴 2 실행 ?

버튼 1 실행 ?

버튼 2 실행 ?

버튼 1 실행 ?

화면 표시

화면 표시

화면 표시

메뉴와 버튼이 추가될 경우계속 반복되는 코드 추가로 코드가 지저분해짐

Applicat ion1

-changeUIToMenu1()-changeUIToMenu2()-processButton1WhenMenu1()-processButton2WhenMenu1()-processButton1WhenMenu2()-processButton2WhenMenu2()

Page 7: [강의] OOP 개요

7 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 디자인 2

Applicat ion

-currentScreenUIScreenUI

<< interface>>

+show()+handleButton1Click()+handleButton2Click()

Menu1ScreenUI

+show()+handleButton1Click()+handleButton2Click()

Menu2ScreenUI

+show()+handleButton1Click()+handleButton2Click()

메뉴가 추가될 경우에도인터페이스를 구현하는 클래스만 추가하면 됨

Page 8: [강의] OOP 개요

8 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 절차 (Procedual) 지향

데이터데이터 데이터데이터

데이터데이터 데이터데이터

프로시저프로시저

프로시저프로시저

프로시저프로시저

프로시저프로시저

Page 9: [강의] OOP 개요

9 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 객체 (Object) 지향

객체

프로시저프로시저

데이터데이터

객체

프로시저프로시저

데이터데이터

객체

프로시저프로시저

데이터데이터객체

프로시저프로시저

데이터데이터

Page 10: [강의] OOP 개요

10 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 객체지향 언어 시초– 객체 지향 언어의 시초는 1960 년 노위지안 컴퓨팅 센터의 조한 달과 크리스틴이 발표한 시뮬라 67이

다 . 시뮬라 67이 채택하고 있는 가장 중요한 개념은 클래스의 도입으로서 이 아이디어는 스몰토크 , C++ 등에도 사용되었다 . 하지만 시뮬라 67의 발표 이후 10 여년 간 객체 지향 언어는 전혀 주목을 받지 못하였다 . 1970 년 컴퓨터 산업을 주도한 IBM, AT&T, 미 국방성 등에서 관심을 두지 않았기 때문에 시뮬라 67은 실용적인 언어로 발전하지는 못하였다 . 하지만 이의 학문적 가치는 인정받고 있다 .

• 구성 요소– 클래스 (Class) : 같은 종류 (또는 문제 해결을 위한 )의 집단에 속하는 속성 (attribute) 과 행위

(behavior) 를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형 (user define data type) 이라고 할 수 있다 . 클래스는 프로그래머가 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 사용할 수 있고 , 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다 .

– 객체 (Object) : 클래스의 인스턴스 (실제로 메모리상에 할당된 것 )이다 . 객체는 자신 고유의 속성(attribute) 을 가지며 클래스에서 정의한 행위 (behavior) 를 수행할 수 있다 . 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다 .

– 메서드 (Method), 메시지 (Message) : 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있다 . 메서드는 한 객체의 서브루틴 (subroutine) 형태로 객체의 속성을 조작하는 데 사용된다 . 또 객체 간의 통신은 메시지를 통해 이루어진다 .

Page 11: [강의] OOP 개요

11 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 특징– 은닉성 : 자료 추상화

• 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다 . 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다 . 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다 . 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스 , 추상 자료형의 인스턴스를 객체 , 추상 자료형에서 정의된 연산을 메소드 , 메소드의 호출을 메시지라고 한다.

– 상속성• 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다 . 상속을 받는 새로운 클래스를 부

클래스 , 파생 클래스 , 하위 클래스 , 자식 클래스라고 하며 새로운 클래스가 상속한 기존의 클래스를 기반 클래스 , 상위 클래스 , 부모 클래스라고 한다 . 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화시킬 수 있다.

• 다중 상속은 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다 . 클래스들의 기능이 동시에 필요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고 (예 : 다이아몬드 상속 ) 프로그래밍 언어에 따라 사용 가능 유무가 다르므로 주의해서 사용해야 한다 . JAVA 는 지원하지 않는다 .

Page 12: [강의] OOP 개요

12 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 특징– 다형성

• 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩 ( 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것 )이나 오버로딩 ( 같은 이름의 메소드가 인자의 갯수나 자료형에 따라서 다른 기능을 하는 것 )을 의미한다 . 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다 .

Page 13: [강의] OOP 개요

13 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 추상화 (abstraction) 하고 정제 (refinement) 하는 과정– 추상화 : 내부의 복잡한 사실들을 감추고 이해하기 쉽도록 단순화하는 것

– 정제 : 추상화된 사실의 내부를 펼치는 것

• 모델링 (modeling)– 모델 : 실체의 단순화 (simplication of reality)

– 실제 업무의 추상화 과정

– 시스템 설계자와 사용자 사이의 의사소통 용이public class Customer {

private String name;

public String getName() {

}

public void setName(String s) {

}

}

Cust om er

-name: String

+ getName(): String+ setName(String s): void

Page 14: [강의] OOP 개요

14 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• UML (unified modeling language)– 시스템을 시각화하고 명세화하고 구축하고 문서를 작성하는데 사용하는 그래픽으로 표현되는 언어

– 작성 프로그램 : Rational Rose, Together, StarUML ( 무료 )

Page 15: [강의] OOP 개요

15 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 OOP OOP 개요개요

• 객체지향 개발 프로세스

Page 16: [강의] OOP 개요

16 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 클래스 개요클래스 개요

• 클래스 (Class) : 객체에 대한 추상화 작업의 결과

클래스명

특성

행위 ()

Page 17: [강의] OOP 개요

17 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 클래스 개요클래스 개요

• 객체 (Object) : 클래스를 기반으로 생성 (instance)

객체명 :클래스명클래스명

특성

행위 ()

[Java]

Car myCar = new Car();

[C#]

Car myCar = new Car();

[VB.Net]

Dim myCar As new Car();

myCar: Car

Page 18: [강의] OOP 개요

18 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 클래스 개요클래스 개요

• Date 클래스– 멤버변수 정의

– 생성자 정의

– 소멸자 정의 : 딱히 할 일 없음 .

– 객체 생성

class Date {

int year;

int month;

int day;

Date() {

year = month = day = 1;

}

Date(int yy, int mm, int dd) {

year = yy;

month = mm;

day = dd;

}

protected void finalize() throws Throwable {

super.finalize(); // 자바}

protected override void Finalize() { //C#

try { } finally { base.Finalize(); }

}

}

Date myDate = new (2013, 3, 18);

Date yourDate = new (2013, 2, 18);

Page 19: [강의] OOP 개요

19 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 클래스 개요클래스 개요

• 접근자– private

– public

public class Car {

private int body;

private int engine;

private int steering;

private int transmission;

private int wheel;

public void start() {

}

public void stop() {

}

public void accelerate() {

}

public void slowDown() {

}

public void turnLeft() {

}

public void turnRight() {

}

}

Page 20: [강의] OOP 개요

20 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 클래스 개요클래스 개요

• 객체 (Object)– 객체의 핵심은 기능을 제공하는 것

• 스피커 : 소리 크게 , 소리 작게 , 음소거

– 인터페이스 : 객체가 제공하는 모든 오퍼레이션 집합• 기능 식별 이름

• 파라미터 및 파라미터 타입

• 기능 실행 결과 값

– 메시지 : 객체에게 오퍼레이션의 실행을 요청하는 것

• 의존 – 한 객체가 다른 객체를 이용하는 것

– 의존하는 클래스가 변경되면 다른 클래스에 영향을 미친다 .

• 캡슐화– 회원 (Member) 만료 여부 확인 (isExpire) 처리

• 절차지향 방법 : 직접 만료일자로 조회 (if ( 현재 일자 < 만료 일자 ) …)

• 객체지향 방법 : 회원 클래스에서 만료여부 확인 오퍼레이션 제공 (member.isExpire())

– 신문배달부 (Papyerboy) 와 고객 (Customer) 의 지갑 (Wallet)• 신문배달부가 고객의 지갑에서 신문값을 가져온다 ? 고객이 지불한다 !

A 클래스 B 클래스 C 클래스

Page 21: [강의] OOP 개요

21 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 객체지향 설계객체지향 설계

• 객체지향 설계 과정– 제공해야 할 기능을 찾고 또는 세분화하고 , 그 기능에 알맞은 객체에 할당한다 .

• 기능을 구현하는데 필요한 데이터를 객체에 추가한다 .

• 기능은 최대한 캡슐화해서 구현한다 .

– 객체 간에 어떻게 메시지를 주고받을지 결정한다 .

– 위의 과정을 지속적으로 반복한다 .

• 객체지향 설계 원칙 : SOLID– 단일 책임 원칙 (Single Responsibility Principle) : 오선근 3/20

– 개방 폐쇄 원칙 (Open-Closed Principle) : 김용철 3/20

– 리스코프 치환 원칙 (Liskov Substitution Principle) : 김순형 3/20

– 인터페이스 분리 원칙 (Interface Segregation Principle) : 정재곤 3/25

– 의존 역전 원칙 (Dependency Inversion Principle) : 김미선 3/25

Page 22: [강의] OOP 개요

22 광주광역시 남구 진월동 314-7 전화 /팩스 : 062-653-2879 / 062-676-4869 홈페이지 : http://www.comin.com

정직한 기업 , 공부하는 사원 , 발전하는 가민 참고 서적참고 서적