1. 1
작성자 : 기노현
작성부서 : 정보기술연구소
이메일 : nhkee@comin.com
전화 / 팩스 : 062-653-2879 / 062-676-
4869
2014 년 5 월 14 일
객체지향 프로그래밍객체지향 프로그래밍
(Object Oriented Programming)(Object Oriented Programming)
2. 2광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
• 좋은 소프트웨어란 ?
– 사용자의 요구사양이 정확하게 반영되어 있어야 한다 .
– 소프트웨어에 포함되어 있는 잠재적인 에러가 가능한 적어야한다 .
– 개발비용 이내에 만들어져야 한다 .
– 개발된 소프트웨어는 운영하기 쉽고 유지보수가 쉬워야 한다 .
– 안전성 (Safety) 과 보안성 (Security) 이 높아야 한다 .
– 시간과 자원 효율이 좋아야 한다 .
– 소프트웨어의 구성이나 설계구조가 알기 쉬워야 한다 .
– 소프트웨어는 검사하기가 쉬워야 한다 .
– 소프트웨어와 관련된 고품질의 문서가 존재해야 한다 .
OOPOOP 개요개요
3. 3광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
• 좋은 소프트웨어란 ?
OOPOOP 개요개요
고객이 원하는 기능을 제공하는
소프트웨어
고객이 원하는 기능을 제공하는
소프트웨어
객체지향 기본 원리를 통한
유연한 소프트웨어
객체지향 기본 원리를 통한
유연한 소프트웨어
유지보수와 재사용이 쉬운
소프트웨어
유지보수와 재사용이 쉬운
소프트웨어
4. 4광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• Good Software 인증시 평가 항목
5. 5광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 어떤 코드로 작성
[ 메뉴영역 ]
메뉴 1
메뉴 2
[ 공통버튼 영역 ]
[ 화면 영역 ]
버튼 1
6. 6광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 디자인 1
시작
메뉴 1 실행 ?
메뉴 2 실행 ?
버튼 1 실행 ?
버튼 2 실행 ?
버튼 1 실행 ?
화면 표시
화면 표시
화면 표시
끝
메뉴와 버튼이 추가될 경우
계속 반복되는 코드 추가로
코드가 지저분해짐
Applicat ion1
-changeUIToMenu1()
-changeUIToMenu2()
-processButton1WhenMenu1()
-processButton2WhenMenu1()
-processButton1WhenMenu2()
-processButton2WhenMenu2()
7. 7광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 디자인 2
Applicat ion
-currentScreenUI
ScreenUI
<<interface>>
+show()
+handleButton1Click()
+handleButton2Click()
Menu1ScreenUI
+show()
+handleButton1Click()
+handleButton2Click()
Menu2ScreenUI
+show()
+handleButton1Click()
+handleButton2Click()
메뉴가 추가될 경우에도
인터페이스를 구현하는
클래스만 추가하면 됨
8. 8광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 절차 (Procedual) 지향
데이터데이터 데이터데이터
데이터데이터 데이터데이터
프로시저프로시저
프로시저프로시저
프로시저프로시저
프로시저프로시저
9. 9광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 객체 (Object) 지향
객체
프로시저프로시저
데이터데이터
객체
프로시저프로시저
데이터데이터
객체
프로시저프로시저
데이터데이터
객체
프로시저프로시저
데이터데이터
10. 10광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 객체지향 언어 시초
– 객체 지향 언어의 시초는 1960 년 노위지안 컴퓨팅 센터의 조한 달과 크리스틴이 발표한 시뮬라 67 이
다 . 시뮬라 67 이 채택하고 있는 가장 중요한 개념은 클래스의 도입으로서 이 아이디어는 스몰토크 , C+
+ 등에도 사용되었다 . 하지만 시뮬라 67 의 발표 이후 10 여년 간 객체 지향 언어는 전혀 주목을 받지
못하였다 . 1970 년 컴퓨터 산업을 주도한 IBM, AT&T, 미 국방성 등에서 관심을 두지 않았기 때문에 시
뮬라 67 은 실용적인 언어로 발전하지는 못하였다 . 하지만 이의 학문적 가치는 인정받고 있다 .
• 구성 요소
– 클래스 (Class) : 같은 종류 ( 또는 문제 해결을 위한 ) 의 집단에 속하는 속성 (attribute) 과 행위
(behavior) 를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형 (user define data
type) 이라고 할 수 있다 . 클래스는 프로그래머가 아니지만 해결해야 할 문제가 속하는 영역에 종사하
는 사람이라면 사용할 수 있고 , 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다 .
– 객체 (Object) : 클래스의 인스턴스 ( 실제로 메모리상에 할당된 것 ) 이다 . 객체는 자신 고유의 속성
(attribute) 을 가지며 클래스에서 정의한 행위 (behavior) 를 수행할 수 있다 . 객체의 행위는 클래스
에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다 .
– 메서드 (Method), 메시지 (Message) : 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을
내리는 메시지라 할 수 있다 . 메서드는 한 객체의 서브루틴 (subroutine) 형태로 객체의 속성을 조작
하는 데 사용된다 . 또 객체 간의 통신은 메시지를 통해 이루어진다 .
11. 11광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 특징
– 은닉성 : 자료 추상화
• 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다 . 자료 추상화를 통해 정
의된 자료형을 추상 자료형이라고 한다 . 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로
접근 제어를 통해서 자료형의 정보를 은닉할 수 있다 . 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래
스 , 추상 자료형의 인스턴스를 객체 , 추상 자료형에서 정의된 연산을 메소드 , 메소드의 호출을 메시지라고 한다
.
– 상속성
• 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다 . 상속을 받는 새로운 클래스를 부
클래스 , 파생 클래스 , 하위 클래스 , 자식 클래스라고 하며 새로운 클래스가 상속한 기존의 클래스를 기반 클래
스 , 상위 클래스 , 부모 클래스라고 한다 . 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로
그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화시킬 수 있다
.
• 다중 상속은 클래스가 2 개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다 . 클래스들의 기능이 동시에 필
요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고 ( 예 : 다이아몬드 상속 ) 프로그래밍 언어에 따라 사용
가능 유무가 다르므로 주의해서 사용해야 한다 . JAVA 는 지원하지 않는다 .
12. 12광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 특징
– 다형성
• 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩 ( 같은 이름의 메소드가 여러 클래스에서 다
른 기능을 하는 것 ) 이나 오버로딩 ( 같은 이름의 메소드가 인자의 갯수나 자료형에 따라서 다른 기능을 하는 것 )
을 의미한다 . 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다 .
13. 13광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 추상화 (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
14. 14광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• UML (unified modeling language)
– 시스템을 시각화하고 명세화하고 구축하고 문서를 작성하는데 사용하는 그래픽으로 표현되는 언어
– 작성 프로그램 : Rational Rose, Together, StarUML ( 무료 )
15. 15광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
OOPOOP 개요개요
• 객체지향 개발 프로세스
16. 16광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
클래스 개요클래스 개요
• 클래스 (Class) : 객체에 대한 추상화 작업의 결과
클래스명
특성
행위 ()
17. 17광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
클래스 개요클래스 개요
• 객체 (Object) : 클래스를 기반으로 생성 (instance)
객체명 : 클래스명
클래스명
특성
행위 ()
[Java]
Car myCar = new Car();
[C#]
Car myCar = new Car();
[VB.Net]
Dim myCar As new Car();
myCar: Car
18. 18광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
클래스 개요클래스 개요
• 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);
19. 19광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
클래스 개요클래스 개요
• 접근자
– 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() {
}
}
20. 20광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
클래스 개요클래스 개요
• 객체 (Object)
– 객체의 핵심은 기능을 제공하는 것
• 스피커 : 소리 크게 , 소리 작게 , 음소거
– 인터페이스 : 객체가 제공하는 모든 오퍼레이션 집합
• 기능 식별 이름
• 파라미터 및 파라미터 타입
• 기능 실행 결과 값
– 메시지 : 객체에게 오퍼레이션의 실행을 요청하는 것
• 의존
– 한 객체가 다른 객체를 이용하는 것
– 의존하는 클래스가 변경되면 다른 클래스에 영향을 미친다 .
• 캡슐화
– 회원 (Member) 만료 여부 확인 (isExpire) 처리
• 절차지향 방법 : 직접 만료일자로 조회 (if ( 현재 일자 < 만료 일자 ) …)
• 객체지향 방법 : 회원 클래스에서 만료여부 확인 오퍼레이션 제공 (member.isExpire())
– 신문배달부 (Papyerboy) 와 고객 (Customer) 의 지갑 (Wallet)
• 신문배달부가 고객의 지갑에서 신문값을 가져온다 ? 고객이 지불한다 !
A 클래스 B 클래스 C 클래스
21. 21광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
객체지향 설계객체지향 설계
• 객체지향 설계 과정
– 제공해야 할 기능을 찾고 또는 세분화하고 , 그 기능에 알맞은 객체에 할당한다 .
• 기능을 구현하는데 필요한 데이터를 객체에 추가한다 .
• 기능은 최대한 캡슐화해서 구현한다 .
– 객체 간에 어떻게 메시지를 주고받을지 결정한다 .
– 위의 과정을 지속적으로 반복한다 .
• 객체지향 설계 원칙 : 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
22. 22광주광역시 남구 진월동 314-7 전화 / 팩스 : 062-653-2879 / 062-676-4869 홈페이지 :
정직한 기업 , 공부하는 사원 , 발전하는 가
민
참고 서적참고 서적