본문 바로가기
2023 활동 - 4학년/[1월 ~ 4월] sw 아카데미 백엔드 과정

[2023.02.14 / CNU SW 아카데미] 객체지향 프로그래밍2

by 은행장 노씨 2023. 2. 14.

객체지향 개념과 클래스 및 객체

객체지향 개념

: 객체지향을 대표하는 여섯가지 개념

- 영어로 외우는 것이 좋다. 필드에서는 영어로 소통하기 때문이다.  

‣ Class (클래스)
‣ Object (객체)
‣ Abstraction (추상화)
‣ Encapsulation (캡슐화)
‣ Inheritance (상속)
‣ Polymorphism (다형성)

 

ㅣ클래스 class

: 특성과 행동으로 정의되는 객체의 분류

- 특성 분류의 객체를 찍어내기 위한 정형화 된 '틀'

  • 특성(property) : 객체가 갖는 속성
  • 행동(action) : 객체가 수행할 수 있는 동작

- 클래스는 집합에 가깝다. 

출처 : 객체지향 프로그래밍

 

l 객체 object

객체는 클래스와 반대다. 

객체는 분류 안에 속하는 실제 사례라고 생각한다. object == instance

클래스의 인스턴스가 오브젝트다. 

- 사례들은 이미 값이 할당되어 있다. 

  • 상태(property) : 속성에 부여된 값
  • 행동(action) : 객체가 수행할 수 있는 동작(클래스와 동일)
* 객체화((instantiation)
: 사례를 만들어내는 것, 클래스로부터 오브젝트를 만들어낸다.
출처 : 객체지향 프로그래밍

 

ㅣ추상화 Abstraction

- 객체 사용과 무관한 세부 구현을 감춤

논문 앞에 Abstract이 있다. 요약을 읽으면 대략 알 수 있다.  

- 사용자는 실제 구현을 보지 않고 객체가 제공하는 기능에 집중(What > How)

  • 추상 클래스(abstract class), 인터페이스(interface)등의 지원
    - 마우스도 하나의 인터페이스일 수 있다. 
    - 제조사마다 구현하는 방법이 다를 수 있다. 
  • 행동(action) 형태만 제공
  • 행동의 구현은 상속 또는 구현하는 클래스에 정의

출처 : 객체지향 프로그래밍

 

l 캡슐화 Encapsulation 

- 추상화랑 비슷하지만 목적이 다르다. 

- 캡슐화는 외부로부터 내 자신을 지키는 것이다. 나를 함부로 못 써!

: 객체의 내부 상태를 외부로부터 감춤

- 클래스에 정의된 행동(action)을 통해서만 객체 내부 정보에 접근을 허용

- 인터페이스를 제공해줘야 한다.

  •  접근 지정자(access modifier)를 통해 캡슐화를 수행
    - public : 접근 제한 없음
    - protected : 동일한 패키지 + 자식 클래스만 접근 가능
    - private : 클래스 내부에만 접근 가능
    - default : 자바에서 사용 / 동일한 패키지 내의 클래스만 접근 가능
  • c++에서는 모든 것이 private다. 

출처 : 객체지향 프로그래밍

 

l 상속 Inheritance 

- 기존 클래스로 부터 새로운 클래스를 파생

현실 세계의 상속과 동일하다. 

=> 세부 분류를 만들어낸다.

- 기존 클래스의 특성 및 행동을 물려받음 + 자신만의 특성과 행동을 정의 

책상 <= 전동책상(+ 높이조절)
자동차 <= 전기차(+ 전기 충전)
  • 부모 클래스 : 상속해 준 클래스
    - parent or super or base class
  • 자식 클래스 : 상속 받은 클래스
    - child or sub or derived class

출처 : 객체지향 프로그래밍

 

ㅣ 다형성 Polymorphism

: 다양한 형태나 의미를 가질 수 있는 특성

-> 여러 다른 객체를 하나의 타입으로 표현할 수 있다. 
(트럭, 승용차, 전기차 => 자동차)

-> 여러 다른 함수 호출을 하나의 호출문으로 표현할 수 있다. 

  • 정적 다형성 static polymorphism
    - 형태나 의미가 컴파일 시점에 결정
  • 동적 다형성 dynamic polymorphism
    - 형태나 의미가 실행 시점에 결절

- 프로그램을 효율적이고 아름답게 만들어주는 정수

- 정말정말 훌륭하다. 실력이 늘수록 불만이 생긴다. 그때 다형성을 찾게 된다. 

출처 : 객체지향 프로그래밍

 


객체지향 언어의 장점

  • 코드의 재사용성이 높음
    - 기존 코드를 이용하여 새로운 코드를 작성하기 용이함
  • 코드의 관리가 쉬움
    - 객체간의 관계를 이용하여 적은 노력으로 쉽게 코드 변경이 가능
  • 신뢰성 높은 프로그래밍이 가능
    - 캡슐화를 통해 데이터를 보호하고 올바른 값을 유지

 

클래스와 객체의 용도

  • 클래스는 객체의 형태를 정의해 높은 것
    - 객체의 특성과 행동을 정의하는 '틀'
    - 객체는 생성하기 위해 사용
  • 객체는 실존하는 사물 또는 개념
    - 상태와 행동을 갖는 독립적인 개체
    - 클래스로부터 객체화를 통해 생성

 

세 가지 변수 종류

  • 인스턴스 변수
    - 객체의 상태를 구성하는 변수
  • 스태틱 변수
    - 클래스에 귀속되어 해당 클래스의 모든 객체가 공유하는 변수
  • 로컬 변수
    - 해당 블록({...}) 내에서 정의되며, 블록 내에서만 접근 가능한 변수

두 가지 메소드 종류

  • 인스턴스 메소드
    ‣ 객체의 행동을 정의한 함수
    ‣ “참조변수.인스턴스메소드명” 으로 접근 : Car c; c.pushAccel();
    ‣ 수신자 객체가 this 변수로 전달되어, 객체의 상태 변화가 가능
  • 스태틱 메소드
    ‣ 클래스에 귀속된 행동
    ‣ “클래스이름.스태틱메소드명” 으로 접근 : Car.honk();
    ‣ 수신자 객체가 없으므로, 객체의 상태 변화 불가 (i.e. 스태틱 외의 멤버 변수에 접근 불가)