2010학년도 2학기 객체지향의 이해
이번 시간의 학습목표 이번 시간을 정상적으로 이수하면 학생들은 객체지향 개념을 설명할 수 있다 객체지향의 원리에 대해 설명할 수 있다 추상화(Abstraction) 상속(Inheritance) 다형성(Ploymorphism) 캡슐화(Encapsulation) 메시지 전송(Message Sending) 연관(Association) 집합연관(Aggregation)
객체 - 어디서나 볼 수 있는 객체 (1) 객체(Object)란? 현대의 소프트웨어 객체 실세계(현실)에 존재하는 사물(물체)이나 개념 현대의 소프트웨어 실세계를 그대로 혹은 약간 본떠 만듦 즉, 우리 주변의 객체를 프로그램으로 흉내내는 것 객체 클래스의 한 인스턴스 구조(structure)를 가짐 특성(Feature) = 속성(Attribute) + 행동(Behavior)
객체 - 어디서나 볼 수 있는 객체 (2) 클래스(Class) 비슷한 속성과 공통적인 행동수단을 지닌 것들의 범주 / 그룹 객체를 생성하는 틀 혹은 템플릿(Template) : 붕어빵 기계 속성(Attribute)과 행동(Behavior)으로 정의 속성과 행동이 더 많이 반영될수록 현실세계에 더 가까운 모델 Washing Machine brandName modelName serialName capacity drumVolume internalTimer trap motor motorSpeed addClothes( ) addDetergent( ) removeClothes( ) addBleach( ) timeTheSoak( ) timeTheWash( ) timeTheRinse( ) timeTheSpin( ) Washing Machine brandName modelName serialName capacity addClothes( ) addDetergent( ) removeClothes( )
C# 프로그램에서의 클래스와 객체 using System; class Profile { private int age = 23; public string name = “돌이”; private string phone = “02-123-4567”; public void PrintInfo( ) Console.WriteLine(“My name is {0}”, name); Console.WriteLine(“My age is {0}”, age); Console.WriteLine(“My phone number is {0}”, phone); } class Access public static void Main( ) Profile MyProfile = new Profile( ); MyProfile.PrintInfo( );
java 프로그램에서의 클래스와 객체 class Profile { private int age = 23; public string name = “순이”; private string phone = “02-123-4567”; public void PrintInfo( ) System.out.println(“My name is ” + name); System.out.println(“My age is ” + age); System.out.println(“My phone number is ” + phone); } public static void Main(String args[ ]) Profile MyProfile; MyProfile = new Profile( ); MyProfile.PrintInfo( );
객체 지향의 몇 가지 개념(1) 추상화(Abstraction) 객체를 모델링할 때 필요로 하는 만큼의 속성과 오퍼레이션을 추출하는 것 객체의 용도에 따라 속성과 오퍼레이션이 달라질 수 있음 복잡성을 줄여서 단순하게 표현하는 것 예) 세탁기(제조기술자, 세탁물 출입관리 프로그램) 예)자동차(세무공무원, 중고딜러) Car carType displacement age residence addTax( )
객체 지향의 몇 가지 개념(2) 상속(Inheritance) 객체는 클래스의 한 인스턴스로 클래스의 속성과 오퍼레이션을 물려 받음 클래스는 객체의 탬플릿 (예) 붕어빵 기계와 붕어빵 서브 클래스는 수퍼 클래스의 속성과 오퍼레이션을 물려 받음 Appliance HouseholdItem Appliance Furniture
객체 지향의 몇 가지 개념(3) using System; class Parent { protected string name; protected int age; private int inheritedMoney; } class Son : Parent public Son( ) this.name = “아들”; this.age = 7; public void PrintInfo( ) { …… } class Inheritance public static void Main( ) class Car { int velocity; int wheelNum; String carName; Car( ) } void speedUp( int speed) velocity += speed; class Truck extends Car int ton; class Taxi extends Car boolean isPrivate; ……
객체 지향의 몇 가지 개념(4) 다형성(Ploymorphism) 동일한 이름의 오퍼레이션이라도 오퍼레이션이 일어나는 클래스에 따라 행동이 다름 각 클래스마다 자신의 오퍼레이션이 어떻게 행동하는 지를 앎 (예) open open door, open window, open newspaper, open present, open account, open conversation
객체 지향의 몇 가지 개념(5) 캡슐화(Encapsulation) 객체는 자신의 오퍼레이션을 수행하고 결과를 내놓지만, 오퍼레이션의 동작원리는 숨겨져 있음 객체는 자신의 동작원리를 클래스라는 껍데기로 캡슐화함(숨김) 정보은닉(Information Hiding)이라고 부르기도 함 (예) TV 소프트웨어 세계에서 불의의 사고를 사전 차단 한 객체의 오퍼레이션 수정이 다른 객체에 영향을 안 주므로 결국 다른 객체를 고칠 필요가 없음 (예) 컴퓨터시스템에서의 모니터 객체는 얼굴(Face)만 보임으로써 그 객체가 수행하는 오퍼레이션을 다른 객체나 외부세계에서 지시할 수 있도록 함. 이를 인터페이스(Interface)라 함 (예) 세탁기의 다이얼, TV 본체의 버튼, 리모콘의 버튼 컴포넌트 기반 프로그래밍이 가능해지게 됨
객체 지향의 몇 가지 개념(6) 메시지 전송(Message Sending) (예) TV와 리모콘 객체는 여러 가지의 인터페이스를 제공함 (예) TV의 인터페이스 (사람에게 제공하는 인터페이스 : 버튼, 리모콘에게 제공하는 인터페이스 : 적외선 수신기) message to turn on
객체 지향의 몇 가지 개념(7) 연관(Association) 한 객체와 다른 객체 간의 관계 단방향성(unidirectional; TV를 켜다)과 양방향성(bidirectional; 결혼하다) 다중성(Multiplicity) : 두개 이상의 연관 기타 다중성의 예는? is married to turn on is married to rides in is a coworker of is a friend of rides in
객체 지향의 몇 가지 개념(8) 집합연관(Aggregation) 전체/부분(whole/part)의 관계 즉, 구성요소 들이 모여서 시스템을 구성함 (예) PC 시스템
객체 지향의 몇 가지 개념(9) 복합연관(Composition) 집합연관과 밀접한 관계, 집합연관의 특별한 종류 컴포넌트가 복합체(Composite) 내에서만 컴포넌트로 존재 (예) 셔츠에서의 소매 (예) 복합체보다 컴포넌트가 먼저 죽는 경우 : 나무와 나뭇잎 (예) 복합체가 없어지면 컴포넌트도 없어짐 : 나무와 나뭇잎
결론은 ? 모든 시스템의 중심은 객체와 객체 사이의 연관관계를 이해하는 것 의뢰인의 요구사항을 조사할 때 가장 중요한 것은 의뢰인의 지식 도메인(Knowledge Domain)을 빨리 이해하는 것 - UML
이번 시간의 학습요약 객체지향 개념 객체와 클래스 속성과 행동 객체지향의 원리 추상화(Abstraction) 상속(Inheritance) 다형성(Ploymorphism) 캡슐화(Encapsulation) 메시지 전송(Message Sending) 연관(Association) 집합연관(Aggregation)