4 minute read

1. OOP

  • OOP(Object-Oriented Programming) : 객체지향 프로그래밍
  • 객체(object)로 불리는 소프트웨어 컴포넌트(Software Components)로 만들어진 프로그램, 즉 객체의 관점에서 프로그래밍하는 것
  • 함수 단위로 순서대로 진행되는 절차지향 프로그래밍과 달리, 애플리케이션을 구성 하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍하는 것

    객체의 설계도 Component == 객체를 정의한 것
    Class == class가 실행되면 Object
    ⟶ 즉, CBD(component based design) 기반 프로그래밍

  • 객체 Object : 대상을 나타내는 단어
    • 기능을 제공하는 메소드(함수)와 데이터를 포함한다.
    • 클래스를 실체화한 것으로 메모리가 할당된 클래스의 인스턴스
  • 인스턴스 Instance: 클래스를 통해서 구현해야 할 대상(객체)이 실제로 구현된 구체적 실체
    • 실행에 필요한 메모리를 확보하는 것 == 메모리 공간에 클래스가 만들어짐
    • 특정 object에 대한 메모리와 메소드를 관리할 수 있는 공간이 확보됨
  • 객체의 인스턴스 Object Instance : 클래스에 선언된 모양 그대로 생성된 실체
    • new를 사용한다.
    • ex) Scanner sc = new Scanner( );
      -> Scanner라는 클래스를 new를 이용하여 실체화한 클래스의 인스턴스 sc.
    • ex) 클래스는 자동차, 객체(인스턴스)는 엄마 차, 내 차, 아빠 차

✏️CBD(component based design) 컴포넌트 기반 설계

  • 재사용이 가능한 컴포넌트의 개발 또는 상용 컴포넌트들을 조합하여 애플리케이션 개발 생산성과 품질을 높이고, 시스템 유지보수 비용을 최소화할 수 있는 개발 방법 프로세스
    • 기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 만드는 소프트웨어 개발방법론 (위키백과)
    • 여러 컴포넌트로 구성된 프로그램은 구조화와 수정이 쉽다.
  • 컴포넌트 Software Components
    • 컴포넌트란 하드웨어의 그래픽카드와 같은 개념으로, 소프트웨어 시스템에서 독립적인 기능을 수행하는 모듈로써, 이후 시스템을 유지보수 하는 데 있어 교체 가능한 부품이다.

    • HIPO (Hierarchical Input Process Output)의 기본 개념
      • input을 통해 output을 내보내는 요소로 생각할 수 있다.
      • 여러 컴포넌트가 조합되어 하나의 더 큰 컴포넌트를 만들 수 있다.
      • 재사용과 조립이 가능한 소프트웨어 자산이다.
      • CBD로 향상되었다.
    • 특징)
      1. 구현, 명세화, 패키지화 그리고 배포될 수 있어야 함
        - 소스코드가 아닌 실행코드 기반으로 재사용이 가능하도록 이미 구현이 되어 있어야 하고, 그에 대한 용도, 유형 등의 정보가 명세화되어 있어야 한다. 교체 가능한 컴포넌트를 개발하기 위해 표준을 준수해야 하며, 독립적 단위로 패키지화되어 있어야 한다.
      2. 하나의 컴포넌트는 하나 이상의 클래스로 구성될 수 있음
      3. 컴포넌트는 인터페이스를 통해서만 접근할 수 있음

즉, 독립적 기능을 위해 여러 클래스로 한번 만들어 놓은 컴포넌트들을 재사용, 조립하여 새로운 프로그램을 만들고, 전체적으로는 반복적 개발 프로세스를 적용하여 혁신적인 생산성을 향상 시키는 것이 컴포넌트 기반 설계라고 할 수 있다.

2. 클래스 Class

  • 클래스(Class)란 Java 프로그램에서 객체를 생성하기 위한 일종의 설계도.
  • 객체가 가지는 속성(필드)과 동작(메소드)으로 이루어져 있다.
  • 흔히 붕어빵(객체)을 만들기 위한 붕어빵 틀(클래스)이라고 비유를 한다.
  • 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성되어 있다.
  • 이들은 생략될 수도 있고 하나 이상 작성될 수도 있다.
  • 여러 개의 객체가 하나의 클래스에서 만들어질 수 있다. (Method Invocation)
- 객체 object : 현실에 혹은 인간들의 생각에 존재하는 개념  

- 필드 field (=value) : 객체의 데이터가 저장되는 곳    

- 멤버필드 member field : 클래스에서 정의된 값 

- 메소드 method (=member function): 객체의 동작에 해당하는 실행 블록, 클래스의 특성 함수들 

- 생성자 constructor: 객체가 실제로 생성될 때 초기화 역할  

- 정보 은닉 Information hiding: 외부 클래스로부터 멤버필드와 function에 접근을 막는 것  

✏️Class 특징 (= OOP의 특징)

  1. 추상화 Abstraction : 아이디어, 개념적인 생각에 대한 설계
    • 공통의 속성이나 기능을 묶어 이름을 붙이는 것 즉, 도출했던 object에서 필요한 것들만 모아두는 것
    • 객체 지향적 관점에서 클래스를 정의하는 것을 바로 추상화라 할 수 있음
    • 프로그램의 quality가 일차적으로 걸러짐

    • 예시
      - Abstraction: 한식, 중식, 양식을 각각의 객체(추상화의 대상)라고 할 때, 레스토랑으로 이것들을 하나로 묶으려 하는 것이 추상화가 된다. 이 때, 레스토랑의 위치, 메뉴, 가격, 주문, 식사, 포장 등의 요소들을 추출한다.   
      
      - Modeling: 추상화로 추출한 요소들을 객체로 선정하고 객체의 속성과 동작을 정의하는 것으로, 객체의 속성에는 위치, 메뉴, 가격이 있을 것이고, 객체의 동작에는 주문, 식사, 포장이 있을 것이다.  
      
      - Class Definition: 모델링에서 정한 객체들(위치, 메뉴, 가격, 주문 등)을 프로그래밍 언어로 정의하는 것이다.
    
  2. 캡슐화 Encapsulation : 데이터 구조와 데이터를 다루는 방법들을 결합해 묶는 것
    • 클래스 안에 멤버필드와 멤버함수를 묶어 외부로부터 보호해주는 것
    • 또한 데이터를 외부에서 직접 접근할 수 없고, 오로지 함수를 통해서만 접근 가능
    • 따라서 캡슐화에 성공하면 당연히 정보은닉의 효과가 생김
    • 정보은닉 Information hiding: 외부 클래스로부터 멤버필드와 function에 접근을 막는 것
  3. 상속 Inheritance : 부모 클래스의 특징을 자식 클래스가 물려받는 것
    • ex) 고양이 클래스, 강아지 클래스가 있다고 가정했을 때 고양이와 강아지는 포유류에 해당함. 이때 포유류는 여러 속성들이 정의되어 있는데 고양이와 강아지는 포유류의 이런 속성들을 가지고 있음
    • ->포유류라는 클래스가 고양이와 강아지라는 클래스에 속성을 물려준 것
    • 코드의 중복을 없앨 수 있음
    • 코드의 재사용
  4. 다형성 Polymorphism : 형태가 같은데 다른 기능을 하는 것
    • 같은 이름의 속성을 유지함으로써, 속성을 사용하기 위한 인터페이스를 유지하고, 메소드 이름을 낭비하지 않을 수 있음
    • 오버라이딩 : 부모 클래스로부터 상속을 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의할 수 있음

✏️클래스 인스턴스 Class Instance

  • Object/Things/Concept의 추상화: 개념의 설계 단계
  • 객체 = 데이터(속성) + 메소드(기능)
    • Class : 정의 단계

      Object/Things/Concept의 타입 정의(기술)

    • Class instance (object) : 실행단계

      클래스의 인스턴스로 어떤 것을 위한 프로그램

    • Program

      객체(class instance)의 집합으로 클래스들에 있는 각각의 메소드를 호출

✏️메소드 호출 Method Invocation (MI)

  • Runtime Behavior, 객체지향이 돌아가는 원리
  • JVM에 의해 동작되는 부분으로, 객체를 호출했을 때 다른 클래스의 메소드가 실행 되게끔 메소드를 깨워주는 것을 말한다.
    • ECA룰과 메시지 패싱을 기반으로 함
    • 함수 호출과 유사함
    • 실행 시간에 일어남 (JVM에 의존적)

*ECA(Event Condition Action) rule

: 함수를 호출(event)할 때 시그니쳐(함수 이름, 변수의 개수, 변수의 타입)를 불러주게 되는데(condition) 그 후 실행(action) 되는 것

*메시지 패싱 Message Passing

: 함수가 시행될 때 전달되는 내용으로 어디에 있는 객체의 메소드인지 찾아주며 가상머신이 해줌. ECA룰에 기반함. 안드로이드와 비슷함.

3. 인터페이스 정의 언어 IDL (Interface Definition Language)

  • 분산된 네트워크에 따로 위치한 객체 간의 통신을 위해, 서버 측의 구현 객체가 제공하는 상호 접속 방법을 기술하는 정의 언어

  • 분산 객체 기술에서 새로운 객체들이 어떠한 플랫폼 환경에도 보내어질 수 있으며, 그 환경에서 어떻게 실행되는지를 알아내는 것은 매우 중요함

  • ORB는 한 객체 프로그램과 다른 프로그램 사이에서 브로커 통신을 위해 IDL을 사용하는 프로그램의 예시임

  • IDL은 스터브 내에 설명되어야 할 프로그램의 인터페이스들, 또는 컴파일되는 프로그램의 가벼운 확장을 요구함으로써 동작함. 각 프로그램 내의 스터브는, 그들이 서로 통신할 수 있도록 해주는 브로커 프로그램 때문에 사용됨