요코하마맨

JAVA
객체지향의기초 객체지향이란
2021.06.25 22:05

객체지향이란

  1. 적용업무 소프트웨어를 공업품처럼 부품(소프트웨어 부품) 조합하여 개발할 있게 한다.
  2. 소프트웨어 구조의 복잡함을 경감시킨다.
  3. 개발 대상 어플리케이션의 모델화를 용이하게 한다.
  4. 개발 대상 어플리케이션을 시뮬레이트한 소프트웨어의 설계와 개발을 용이하게 한다.


객체지향의 기초개념


객체지향과 클래스

  • 객체 : 어플리케이션에서 하나하나 식별해야할 대상
  • 클래스 : 유사성이 높은 복수의 객체에서 공통된 성질(속성과 메소드) 추려내서, 그것들을 하나로 모은
  • 인스턴스화 : 클래스에서 객체를 생성하는 조작


메세지와 메소드

  • 메세지(이벤트) : 객체가 다른 객체에게 보내는 지시(인수와 반환값)
  • 메소드(액션) : 메세지에 의해 기동되는 처리나 조작
  • 메세지 패싱 : 다른 객체와 메시지를 주고받는


캡슐화와 정보은폐

  • 캡슐화(Encapsulation) : 데이터 구조와 그것들 다루는 처리를 하나로 묶은
  • 정보은폐(Information Hiding) : 클래스가 가지는 데이터 구조나 처리의 상세를 외부에서는 보여지지 않는것
  • 객체 지향에서는 데이터의 구조와 메소드(처리) 묶어서 클래스로 정의하고 다른 객체와의 인터페이스인 메소드를 통해서만 데이터에 접근할 있는 구조로 되어있다. 캡슐화와 정보 은폐 메커니즘을 이용하여 변경에 따른 영향을 국소화할 있고, 변경에 강한 소프트웨어 구조를 만들 있다. 보수, 생산성의 향상과 함께, 소프트웨어의 부품화를 촉진 있다.


계승 extends

  • 하위의 클래스가 상위의 클래스의 속성과 메소드(처리) 그대로 이용할 있는 구조
  • 계승의 발견법
    • 슈퍼클래스 서브클래스(특화)
    • 서브클래스 슈퍼클래스(범화)
    • 같은 메소드명을 가진 비슷한 행동을 가진 객체, 추상화 클래스(공통의 인터페이스의 식별)
  • 하위 클래스에서는 상위 클래스의 속성과 메소드를 변경하거나 추가 있다.
  • 계승 관계는 “is-a” “a-kind-of” 관계라고 불릴 있다.


집약

  • 객체가 다른 객체를 집합적으로 포함하고 있는 관계
  • 집약의 발견 방법
    • 실제의 사물의 관계에서 식별 : 직갑적으로 식별하는 작업은 대상이나 분석자가 많으면 사람에 따라 견해가 달라 수습이 되지 않게될 있다. 또한 개발 규모가 커지면 실천적이지 못하다
    • 객체의 데이터 구조의 관계에서 식별 : 객체의 속성을 식별해 그것들의 집합관계(반복을 포함하는 경우 ) 관련을 발견하는 것으로 정의 가능하다. 또한 ER도를 작성하는 경우도 비교적 비슷한 작업이기 때문에 모델링 경험자에게 용이하다.
  • 집약의 관계는 “has-a” 또는 “whole-part” 관계라고 있다.
  • 객체 A 다른 객체(B, C)에서 되는 경우, A B C 소유하고 있다라고 하며 “A has-a B”라고 표기한다. 경우 A 복합 객체 B C 컴포넌트 객체(또는 단순히 component)라고 한다.
  • 집약의 관계는 계승과 달리 클래스간의 포함관계가 아니라 객체간의 포함관계이다. 자동차의 타이어나 엔진과의 관계에서는 자동차가 하나의 엔진과 복수의 타이어를 가지고 있으며, 자동차 클래스가 엔진이나 타이어라고 하는 클래스를 포함하고 있는것은 아니다(엔진 is-a 자동차가 아니다)
  • 복합 객체와 컴포넌트는 일체화 되서 존재한다. 복합 객체는 컴포넌트 객체의 존재 없이는 생각할 없다. 컴포넌트 객체만으로 작성하는 것은 기술적으로는 가능하지만 어플리케이션 적으로 의미가 있는가는 별도의 문제이다.


다형성(Polymorphism)

  • 복수의 클래스에 동일명칭의 메소드를 가지게하여 각각 메소드에 다른 행동을 정의하는
  • 동적 속박 기능에 의해 실행시에 객체를 대입하여 어플리케이션의 움직임을 변화하는 것이 가능
  • 다형성의 실장 방법
    • 계승된 클래스간에 대해서 동일의 메소드명의 정의한다(오버라이드)
    • 다른 클래스 또는 동일 클래스 내에 같은 메소드명을 인수의 수나 데이터형을 바꾸어 정의한다(오버로드)


추상화

  • 대상에서 본질적인 부분만 추출하는
    • 데이터의 추상화
      • 어플리케이션 영역에서 식별되는 하나하나의 데이터 항목에서 본질적인 요소를 추출하는 (문자형, 수치형, 년월일형, 주소형, 테이블형 등의이라고 불리는 데이터 구조를 식별하는게 된다)
    • 메소드(처리) 추상화
      • 조건이나 반복처리의 범용화
      • 다형성 이용을 목적으로 같은 메소드명을 부여


MVC(Model-View-Control)

  • 객체를 움직임에서 모델과 뷰와 컨트롤러에 분류하는 방법
  • 통상 뷰나 컨트롤러는 변화하기 쉽고, 모델이 바뀌기 어려운 어플리케이션은 객체를 MVC 분류함으로써 변경에 강한 유연한 시스템을 구축할 있게 된다.
  • MVC 연장으로 소프트웨어를 UI, 모델, 데이터액세스의 3개의 계층으로 논리적으로 분할하는 방법이 있다. 3개의 모델의 특징은 이하와 같다. 밑과 같은 경우에 사이의 인터페이스를 통일적으로 관리하는 메카니즘(Publish/Subcribe 기구 : 어떤 객체의 변화를 자신이 알고있는 다른 객체 전체에 통지하는 메카니즘) 실장함으로써, 하나의 객체의 변화를 즉석에서 전달할 필요가 있는 경우에 적합하다.
    • UI 변화하기 쉽다.
    • 1개의 모델에 대해서 복수의 UI 존재한다.
    • 하나의 데이터베이스(혹은 테이블 등의 논리적인 모임) 대해서 복수의 모델이 대응한다.


프레임워크

  • 특정의 목적을 가진 관련성이 강한 복수의 클래스가 모인
  • 프레임워크가 클래스 라이브러리와 다른 점은 클래스 라이브러리가 개발하는 객체에서 부르는거에 비해, 프레임워크는 그것이 개발하는 객체를 부르는 점에 있다. 프레임워크가 객체를 어떻게 부르는가라는 컨트롤러 기능을 가지고 있고, 개발하는 측은 프레임워크가 규정한 호출법(인터페이스) 따라 고유의 기능을 정의해 나가는 것이다. 때문에 프레임워크를 적용한 개발에는 1부터 구성을 생각할 필요가 없어서 효율적인 개발이 가능하다.


디자인패턴

  • 재이용성이 높은 소프트웨어를 구축하기 위한 수법
    • 과거의 경험을 베이스로 생긴 클래스의 구조나 객체간의 교환에 공통되는 패턴
    • 클래스 구조의 설계 패턴에 시점
      • 객체의 생성방법을 은폐하는 패턴
      • 행동의 상세나 차이를 은폐하는 패턴
      • 데이터 구조의 변화나 차이를 은폐하는 패턴
    • 디자인 패턴의 기술
      • 패턴의 이름
      • 패턴을 일반적으로 적용할수 있는 문제
      • 디자인 패턴의 성질
      • 디자인 패턴을 적용할 때의 결과



객체지향의 프로세스와 표기법


객체지향개발의 흐름

  1. OOA(Object Oriented Analysis) : 객체지향분석
    1. 문제가 무엇인가 명확하게 한다.
    2. 객체의 역할, 관계를 밝혀낸다(분석 모델의 작성)
  2. OOD(Object Oriented Design) : 객체지향설계
    1. 문제를 얼마나 해결하는가를 결정한다.
    2. 분석 모델의 실현방법
  3. OOP(Object Oriented Programming) : 객체지향 프로그래밍
    1. 해결방법에 따라서 해결을 실현한다.
    2. 설계모델의 실장


UML/RUP

  • UML(Unified Modeling Language, 1997)
    • 객체지향분석/설계를 사용한 표준 모델링 언어
    • Booch, OMT, OOSE법을 통합
    • 10종류의 다이어그램
      • 클래스, 객체, 유스케이스, 시퀀스, 콜라보레이션, 액티비티, 스테이트차트, 콤포넌트, 배치, 패키지
  • RUP(Rational Unified Process, 1998)
    • UML 따른 소프트웨어 개발 프로세스
      • 유스케이스 구동, 아키텍처 중심, 반복형 개발


JAVA카테고리 다른 글
번호 제목 날짜 조회
86 REST API란 06.25 715
87 SPA(Single Page Application)이란 06.25 608
89 객체지향의기초 객체지향이란 06.25 613
92 [자바] 자바 스프링 프로젝트 폴더 구성 06.28 843
105 자바 StackTrace를 String 형으로 저장하기 12.08 619