StudyRepository
article thumbnail
Published 2023. 4. 5. 21:07
2. 객체지향 개념 소프트웨어공학
728x90

 

 

 

 

 

 

• 절차적 패러다임

– 소프트웨어가 프로시저 단위로 구성됨


• 명령의 순차적 실행
– 프로시저 추상


• 단순한 데이터에는 적합하나 복잡한 데이터를 가진 응용문제에는 부적합
– 데이터 추상


• 특정한 의미를 이루는 데이터 조각들의 집합


• 시스템의 복잡도를 줄이는데 도움
– 예) 레코드나 구조체
– C, BASIC

 

 

 

 

01 객체지향

 


• 객체지향 패러다임


– 프로시저 추상을 데이터 추상 관점으로 구성
– 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합
– 객체는 클래스로 그룹화
– 클래스의 인스턴스

 


• 선언된 객체의 실제 예


– C++, Java, C#

 

 

 

 

 

추상화 (abstraction) 의 개념


– 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것


– 필수적인 속성만으로 주어진 것을 묘사하므로 나머지 속성들은 추상화, 은닉, 또는 삭제됨

 


• 추상화의 범주


– 자료 추상화

• 문자열, 수, 트리와 같은 계산 될 자료의 특성을 추상화


– 제어 추상화 (알고리즘 추상화)

• 실행 순서를 제어하는 특성을 추상화

• 반복문, 조건문, 프로시저 호출 등

 

 

 

• 기본 추상화 (basic abstraction)


– 가장 지역적인 기계정보에 대한 추상화
• 자료: 변수(integer, float)
• 제어: 배정문

 

 

 


• 구조 추상화 (structured abstraction)


– 보다 전역적인 정보인 프로그램의 구조에 대한 추상화
• 자료: 배열, 구조체
• 제어: 선택문(if문), 반복문(while문, for문)

 

 

 


• 단위 추상화 (unit abstraction)


– 단위 프로그램 전체에 대한 정보의 추상화
– 객체

 

 

 

 

객체지향 패러다임

 

 

객체지향 패러다임은 데이터 및 데이터에 접근하고 수정하는 프러시저를 같은 범주 안에 두고 갭슐화 하는 접근 방법이다.

 

객체는 프로그램을 이루는 구문 단위인 클래스의 인스턴스로서 데이터 추상화와 프러시저 추상화를 모두 실현한 개념이다.

 


문제를 해결하기 위한 모든 계산이 객체(object)라는 것을 기본으로 수행되는 방법

 


• 객체는 클래스의 인스턴스. 클래스는 자료가 추상화된 것이며, 동시에 객체를 조작하는 프로시저에 대한 추상

 


• 실행 프로그램은 특정 작업을 수행하기 위하여 모인 객체의 집합

 

 

 

 

 

 

 

02 클래스와 객체

 

 

클래스와 객체는 객체지향 패러다임에서 가장 기초가 되는 개념이다. 절차지향 프로그램에서는 언제나 알고리즘, 즉 컴퓨터가 계산하거나 제어하는 작업과 그 순서를 생각했다. 그러나 객체지향에서는 프로그램이 다루는 대상을 중심으로 문제를 풀어나간다.

 

예를 들어 학교 수강 신청 시스템을 객체지향으로 설계한다면 수강 신청 절차보다는 교수, 학생, 과목, 강좌, 강의실 등의 대상을 중심으로 사고하여 설계한다.

 

 

클래스는 객체지향 프로그램에서 데이터를 추상화하는 단위이다.

더 정확히 말하면 클래스는 유사한 객체들(클래스의 인스턴스라고 함)을 정의한 프로그램 모듈이다.

같은 상태와 행위를 가진 모든 객체는 같은 클래스에 속한다.

 

 


• 객체


– 실행되는 소프트웨어 시스템에 존재하는 구조화된 데이터의 덩어리

 

– 성질(property)를 가짐
• 객체의 상태(state)를 나타냄


– 행위(behavior)를 가짐
• 어떤 식으로 작용하고 반응하는지를 나타냄
• 실세계에 존재하는 객체의 행위를 시뮬레이션 할 수도 있음

 

 

 

• 클래스


– 객체지향 프로그램에서 추상화의 단위


– 유사 객체들을 정의
• 인스턴스


– 소프트웨어 모듈

• 인스턴스의 구조(속성)를 나타냄
• 행위를 구현하는 메소드를 가짐

 

 

클래스가 될 조건


• 인스턴스들을 가지고 있다면 클래스
• 클래스에 의하여 정의된 집합에 포함된 일개의 멤버라면 인스턴스

 

 

'인스턴스'와 '객체'라는 용어는 같은 의미이다.

 

 

 

03 인스턴스 변수

 

변수는 데이터를 저장하는 장소이다. 클래스는 각 인스턴스에 존재하는 데이터를 저장하기 위해 여러 개의 변수를 정의하는데, 이러한 변수를 인스턴스 변수라고 부른다.

인스턴스 변수는 클래스의 속성을 나타내는 변수와 클래스 사이의 관계를 나타내는 변수로 나눌 수 있다.

 

 

쉽게 말하면, 인스턴스 변수는 클래스 안에 정의된 변수로 각 인스턴스에 존재하는 데이터와 같다.


• 속성
– 단순한 데이터
– 예) name, dateOfBirth, address, telephoneNumber


• 연관
– 주요 클래스 사이의 관계
– 예) supervisor, taskToDo

 

 

 

변수와 객체


• 변수
– 객체를 refer(객체를 담고 있는 그릇)
– 주어진 시점마다 다른 객체를 담고 있을 수 있음


• 한 객체가 어느 한 시점에 여러 다른 변수에 담겨 있을
수도 있음
– supervisor – Employee, Manager


• 변수의 타입
– 변수가 담고 있는 객체의 유형(클래스)을 결정

 

 

 

클래스 변수


• 클래스 변수는 속하는 모든 인스턴스가 공유
– static 변수로 선언
– 어떤 인스턴스가 클래스 변수의 값을 저장하면 클래스에 속한 다른 객체가 변수의 값의 변화를 알 수 있음
– 클래스 변수는
• 디폴트, 상수값 저장에 적합
• 특정 클래스 안에 존재하는 알고리즘에 의해 사용되는 , 항목을 가려내기 위한 테이블이나 구조체

 

 

 

 

메소드


• 클래스의 행위를 구현하는 데 사용한 일종의 프로시저


• 여러 개의 클래스가 같은 이름의 메소드를 가질 수 있음
– 동일한 추상 오퍼레이션을 각 클래스에 맞게 다르게 구현할 수 있음
– 사각형의 면적 구하는 메소드는 원의 면적을 구하는 메소드와는 다르게 구현
• Square.area
• Circle.area

 

• 메소드를 통하여 객체의 속성을 조작

 

 

 

오퍼레이션


• 절차적으로 추상화 된 것으로 클래스의 행위적 특성을 나타낸다.


• 메소드의 추상적 개념


• 오퍼레이션의 다형성

– 실행 중인 프로그램은 같은 이름의 메소드 중 어떤 것을 호출할지 결정해야 하는데, 

이를 오퍼레이션의 다형성이라고 한다.

 


– SavingAccount, MortgageAccount: calculateInterest
• KimsAccount SavingAccount;
• KimsAccount.calculateInterst(Date date);

 

 

 

 

 

 

 

04. 상속

 

4.1(상속)

 

여러 클래스가 같은 속성, 관계, 오퍼레이션을 가진다면 공통적인 사항을 별도의 클래스에 중복 정의하는 것은 비효율적이다.따라서 기본 클래스를 정의하고 여기서 파생된 구체적인 클래스로 특수화하는 것이 좋다.

 

예를 들어 은행의 '예금 계좌 관리' 시스템에서 여러 종류의 계좌를 구현하려면 상속 개념이 적용되어야 한다.

 

잔고와 예금주 같은 속성은 모든 계좌에 공통적이며, 계좌를 개설하고 말소하는 오퍼레이션 또한 모든 계좌에 적용된다. 그러나 조금씩 다른 오퍼레이션, 예컨대 주택 마련 대출 계좌 같은 것은 마이너스 잔고가 가능하고 계좌의 종류마다 이자 계산 법이 다르다. 따라서 Account를 기본 클래스로 정의하고 MortgageAccount(대출 계좌), InstallmentAccount(적금계좌), SavingAccound(예금 계좌) 등과 같이 더 구체화된 서브 클래스를 정의한다.

 

이처럼 여러 개의 서브클래스로부터 공통점을 찾아내어 하나의 슈퍼클래스를 도출하는 과정을 일반화라고 한다. 그리고 일반화 관례를 여러 단계 형성한 것을 상속 계층 구조 또는 is-a계층 구조라 부른다. 서브클래스는 크게 보아 슈퍼클래스의 일종으로 더욱 구체와된 것이기 때문이다. 그러므로 상속 관계가 있는지 판단하려면 is-a관계가 두 클래스 사이에 성립하는지 확인하면 된다.

 

 

상속이랑 슈퍼클래스에 정의한 변수와 메소드를 서브클래스가 묵시적으로 소유하게 하는 것이다.

 

 

4.1 (is-a 규칙)

 

클래스를 상속 계층 구조로 구성하는 것은 객체지향 프로그램을 설계하고 구현하는 데 중요한 작업니다. 그런데 설계를 하다 보면 잘못된 계층 구조를 만들기 쉽다. 따라서 상속 관계를 가진 클래스들이 is-a규칙을 만족시키는지 살펴보아야 한다.

 

이 규칙은 'an A is a B'가 성립하면 A클래스가 B클래스의 서브클래스가 된다는 것이다.

 

 

 

• 일반화를 확인하려면 Is-a 관계를 만족시키는지를 체크


– “A saving account is an account.”
(보통예금 구좌는 은행구좌의 일종이다.)
– “A graduate student is a student.”
(대학원생은 학생의 일종이다.)


• “A school is a university.”이 성립하나?
– Is-a 관계가 아님.
• ‘대학교는 학교의 일종이다.’가 되어야 함

 

 

 

 

 

 

 

 

 

05 다형성

 

 

 

객체지향 패러다임의 장점은 대부분 다형성과 상속 개념에서 비롯된다. 여기서 다형성은 '다양한 모양을 가지는 성질'을 뜻한다.

객체지향 패러다임에서 다형성은 다음 두 가지로 정의할 수 있는데 두 가지 모두 객체지향의 장점이 된다.

 

 

 

1. 다형성은 오퍼레이션이나 속성의 이름이 하나 이상의 클래스에서 정의되고 각 클래스에서 다른 형태로 구현될 수 있는 개념이다.

 

2. 다형성은 속성이나 변수가 서로 다른 클래스에 속하는 객체를 지칭할 수 있는 성질이다.

 

 


• 하나의 추상 오퍼레이션이 서로 다른 클래스에서 다른 방법으로 구현될 수 있는 객체지향의 성질
– 같은 이름을 가진 여러 개의 다른 메소드가 있어야 함
– 어떤 메소드가 실행될지는 변수 안에 있는 객체의 종류에 좌우 됨
– If-else나 switch 문장을 줄여주는 효과

 

 

객체지향에서 다형성은 동적 바인딩으로 실형된다. 동적 바인딩은 실행되는 정확한 코드가 런타임에 결정된느 기법이다. 즉 메시지를 보내는 타깃 객체가 프로그램의 최종 실행 단계에 가서 확정되는 개념이다.

 

 

 

 

추상클래스

 

 

• 오퍼레이션은 의미가 있는 가장 높은 상속구조에서 선언되는 것이 바람직함
– 오퍼레이션은 그 수준에서 구현되지 않고 추상화 될 수 있음
– 이런 클래스를 추상 클래스라 함
• 인스턴스가 생성될 수 없음
• 추상 클래스의 반대는 구체적(concrete) 클래스
– 슈퍼 클래스가 추상 오퍼레이션을 가지고 있다면 서브 클래스 어딘가에는 그 오퍼레이션의 구체적 메소드를 가지고 있어야 함
• 리프 클래스는 모든 오퍼레이션의 구체적 메소드를 가지고 있거나 상속 받아야 함

 

 

 

 

 

06. UML

 

 

UML은 객체지향 소프트웨어를 모델링하는 표준 그래픽 언어로, 심벌과 그림을 사용하여 객체지향 개념을 나타낼 수 있다. 

UML은 '나타내는 방법'이므로 소프트웨어 제품도, 소프트웨어 도구도 아니며 또한 방법론다 아니다. 모델링과정은 객체지향으로 분석하고 설계하는 프로세스를 말하고, 모델링 언어는 설계를 표현할 때 사용하는 그래픽 심벌을 의미한다. UML은 프로세스나 방법을 안내하지 않고 표현 방법만을 제시할 뿐이다.

 

 

 

UML은 건축물의 설계 도면이 다양한 것처럼 소프트웨어에 대한 다양한 관점을 제공한다.

 

 

 

1) 기능적 관점: 사용자 측면에서 본 소프트웨어의 기능을 나타낸다. 즉 소프트웨어가 바깥 세계와 어떻게 상호작용하는지를 나타낸다. 사용 사례 모델링이라고도 부르며, 주로 요구분석 단계에 사용한다.

 

 

2) 정적 관점: 소프트웨어 내부의 구성 요소와 그것들 사이의 구조적 관계를 나타낸다. 클래스 및 그것들 사이의 관계, 패키지 안의 클래스 구성과 패키지 사이의 관계 등을 예로 들 수 있다.

 

 

3) 동적 관점: 소프트웨어의 내부 동작을 나타낸다. 각 요소가 시스템의 요구를 만족시키기 위해 어떻게 동작하고 상호작용하는지를 나타낸다.

 

 

 

UML 다이어그램

 

UML에는 여러 가지 다이어그램이 있다. 

 

 

• 사용 사례 다이어그램 (3장: 요구분석)
• 클래스 다이어그램 (4장: 클래스 모델링)
• 시퀀스 다이어그램 (5장: 동적 모델링)
• 상태 다이어그램 (5장: 동적 모델링)
• 액티비티 다이어그램 (5장: 동적 모델링)
• 패키지 다이어그램 (6장: 아키텍처 설계)
• 배치 다이어그램 (6장: 아키텍처 설계)

728x90

'소프트웨어공학' 카테고리의 다른 글

11. 프로젝트 관리  (0) 2023.04.11
4. 클래스 모델링  (0) 2023.04.07
3. 요구분석  (0) 2023.04.06
1. 소프트웨어란?  (0) 2023.04.05
profile

StudyRepository

@Minseo26262

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!