프로그래밍 자바(객체)
정처기_ part4_ 프로그래밍 언어 활용
객체지향 프로그래밍
=> 내가 기억해야 할 것 요약!
(1) 객체지향 프로그래밍
1) 객체지향기술
2) 객체지향 개발절차
3) java 언어
4) 파이썬 언어
(1) 객체 지향 프로그래밍
1) 객체지향기술
2) 객체지향 개발절차
1) 객체지향기술
객체지향은 현실헤계의 개체들을 디지털 객체화 하고, 이 객체들 간의 통신을 통해 프로그램을 구현
객체를 재사용(확장성, 유지보수 용이)하여 쉽고 빠르게 실제 세계와 유사한 형태로 개발. (객체 자체는 설계가 어렵, 속도가 비교적 느림.)
객체: 속성과 메소드로 구성된 클래스의 인스턴스
속성 : 객체를 나타내는 값, 자료구조, ..
메소드 : 속성을 연산하는 행위, 객체가 수행하는 행위, 연산기능, ..
***중요개념!
객체지향 기술의 구성요소)
붕어빵 객체는 붕어빵 클래스의 인스턴스
객체는 클래스에 의해 구현된 모든 대상을 지칭,
인스턴스는 특정 클래스에서 구현된 객체를 제한적으로 지칭
1. 클래스
객체의 타입을 정의하고 객체를 구현(생성)하는 틀.유사한 성격의 객체들의 공통된 특성을 표현한 데이터 추상화 단위, 기존 언어의 사용자 정의 자료형(구조체)와 함수의 개념을 발전(c언어에서의 구조체와 함수의 개념에 캡슐화 기술을 추가, 발전)
2. 객체(object)
클래스(틀)에 의해 구현된 대상들의 총칭, 현실 세계의 개체와 같은 개념, 객체마다 고유한 속성을 가지며 클래스에 정의된 메소드 수행이 가능
3. 인스턴스
특정 클래스에서 구현된 객체로, 좁은 범위의 객체. 자신을 구현한 클래스와 함께 쓰임!
4. 메시지
객체들 사이를 상호작용하기 위한 인터페이스(메소드)
객체지향 기술의 종류)
1. 캡슐화(정보은닉)
문제해결에 관여하는 속성과 메소드를 하나로 묶는 것, 하나의 클래스로 구성(클래스 내부 속성과 메소드를 외부의 고려되지 않은 영향(side effect)로부터 보호)
장점 : 재사용 용이, 중복성 최소화, 인터페이스가 단순(가독성), 정보은폐로 내부데이터의 일관성이 유지, 사이드이펙트 감소
2. 추상화(abstract)
클래스의 공통된 요소를 추출하여 상위(부모)클래스로 구현, 이후 하위(자식)클래스에서 상세구현, 복잡한 문제를 간략화하는 기법으로 분석의 초첨이 명확해지고 객체 중심의 안정된 모델링이 가능
종류 : 기능 추상화(IPO과정), 자료추상화(D와 D를 묶고 여기에 적용될 기능), 제어추상화(외부 이벤트에 대한 반응)
3. 상속(Inheritance)
상위 클래스의 속성과 메소드를 하위클래스에서 사용하도록 하는 기법, 하위클래스는 상위클래스의 모든 요소를 재사용 또는 확장, 상위클래스의 추상적인 요소를 하위클래스가 구체화
4. 다형성(Polymorphism)
상송된 여러 하위 객체들이 서로 다른 형태를 가질 수 있는 성질, 오버로딩, 오버라이딩 기술로 동일한 메소드명으로 서로 다른 작업 가능. 둘 이상의 클래스에서 동일한 메시지에 대해 서로 다르게 반응하도록 설계
(하나의 이름, 하나의 객체로 서로 다른 형태를 가지고 다른 작업을 할 수 있는 것)
오버로딩: 동일한 이름의 여러 메소드 중 매개변수로 전달되는 인수의 타입과 개수를 식별하여 적절한 메소드를 호출해주는 기능
오버라이딩: 상속 받은 메소드의 내부 기능을 새롭게 정의하는 기능
(객체지향 개발 절차)
객체지향 분석 모델링)
1. 객체 모델링 : 업무에서 요구되는 객체, 속성(자료구조), 메소드 식별
2. 동적 모델링 : 객체들의 기능과 상태 파악, 상태, 활동 다이어그램으로 기능의 흐름 표시
3. 기능 모델링 : 각 기능 상세분석(제한사항, 성능 등), 제어 프름, 기능의 상호작용 표현(DFD)
객체지향 분석 방법론)
1. 럼바우 : 가장 대표적. 객체, 동적, 기능 모형으로 분리하여 접근하는 방법
2. Booch : 미시적(micro), 거시적(macro)개발 프로세스로 접근, 클래스 계층 정의 및 클러스터링 작업 수행
3. Coad&Yourdon : E-R 다이어그램을 사용하여 모델링
4. Jacobson : 사용자와 시스템의 상호작용과정을 서술한 시나리오로 접근하는 방법
5. Wirfs-Brocks : 설계 프로세스 간에 뚜렷한 구분이 없음, 고객 명세의 평가->설계의 연속적인 프로세스
(객체지향 설계)
객체지향 설계의 개념)
사용자 중심, 대화식 프로그램 개발에 적합,
클래스를 객체로, 속성을 자료구조로, 기능을 알고리즘으로 표현하는 것에 중점
객체지향 설계 원칙)
1. 단일 책임
단일 클래스가 제공하는 모든 기능은 하나의 책임을 수행, 클래스를 변경하는 이유는 오직 하나뿐, 낮은 결합고 높은 응집도 유지가 가능
2. 개방 폐쇄(Open-Closed)
소프트웨어 구성요소는 확장에는 열리고, 변경에는 닫힘
3. 리스코프 치환(Liskov substitution)
하위클래스는 언제나 상위클래스로 교체(호환)할 수 있어야 함, 서브클래스는 상위클래스가 정의한 제약사항을 준수
4. 인터페이스 분리(Interface segregation)
사용하지 않는 인페에 시스템이 영향 받으면 x, 하나의 일반적인 인페보다 여러개 구체적인 인페 구성하는것이 굳
5. 의존성 뒤집기(Dependencey Inversion)
하위클래스의 변경사항이 상위클래스에 영향을 미치지 않도록 함, 복잡한 컴포넌트들의 관계를 단순화하고 효율적인 커뮤니케이션이 가능하게 한다.(부모가 자식클래스에 의존하면 안됨)
객체지향 설계 순서)
1. 객체 설계(객체 연산자 정의) :
객체 분석에서 정의된 요구 명세서를 기반으로 객체 연산자를 정의하여 설계
객체 모델 : 객체를 구성하고 있는 클래스와 속성을 객체와 자료구조로 표현
동적 모델 : 설계 시 자료와 자료에 가해지는 프로세스를 묶어 정의하고 관계를 규명
2. 시스템 설계(객체 인터페이스 결정) :
객체 설계 단계에서 정의된 객체 간의 인페를 정하여 전체적인 시스템을 설계, 분석된 객체 모형을 특성별로 구분하는 서브 시스템으로 분할하고, 데이터, 자원관리방법을 결정,
객체들의 계층적 구조를 보여주는 계층 차트를 그리고 객체 제어방식 결정
순차적(Sequentially) 제어방식 : 순서가 존재하는 객체 운영 방식
동시(Concurrent) 제어방식 : 객체 사용을 동시에 수행하는 방식
이벤트 중심 제어방식 : 사건이 발생할 때 마다 객체가 수행되는 방식
객체지향 프로그래밍)
클래스를 정의(명시)하고, 클래스간 계층을 정의, 객체를 생성. 상속과 다형성을 활용, 메시지를 통하여 객체 간 상호작용
객체지향 테스트)
단위 테스트 : 객체의 가장 작은 단위로 캡슐화 된 클래스나 객체를 검사
통합 테스트 :
1. 스레드 기반 : 시스템에 대한 하나의 입력이나 이벤트에 응답하는데 요구되는 클래스를 검즈
2. 사용 기반 : 상위 클래스 영향이 미치지 않는 수준의 하위 클래스들을 독립적으로 검사한 수 상위 클래스 검증, 구조적 검사 기법의 상향식 통합 방법과 유사
3. 검증과 시스템 : 사용자의 요구가 객체에 정확히 반영됐는지, 성능이나 인페상 오류는 없는지 검증