학교 수업

[학교 수업] 객체 지향

WolrdOtaku 2023. 10. 1. 21:51

객체 지향

왜 객체 지향이 필요했을까??

초창기에는 주로 과학실험이나 미사일 발사실험과 같은 모의실험(simulation)을 목적으로 사용되었다.

이 시절의 과학자들은 simulation을 위해 실제 세계와 최대한 유사하게 가상 세계를 컴퓨터 속에 구현하고자 했었는데, 이러한 노력 긑에 객체지향 이론이 탄생했다.

 

객체 지향 이론의 기본 개념

: 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이라는 것이다.

이 후 상속, 캡슐화, 추상화 등을 중심으로 구체적으로 발전되었다.

그 끝에 1960년 중반, 이러한 객체 지향 이론을 프로그래밍 언어에 적용한 최초의 객체지향언어인 Simula가 탄생한 것이다.

 

객체 지향 언어

: 객체 지향 이론을 프로그래밍 언어에 적용한 것

 

그래서 왜 쓸까??

  1. 코드의 높은 재사용성
  2. 코드의 용이한 관리
  3. 신뢰성 높은 프로그래밍

 

클래스와 객체

  • 객체 지향하면, 클래스와 객체에 대한 개념이 빠질 수가 없다.

 

클래스란??

: 객체를 정의해 놓은 것 or 객체의 설계도(틀)

ex) TV 설계도

⇒ 객체를 생성하는 데 사용

 

 

객체란??

: 실제로 존재하는 것

ex) 사물들(책상, 의자, 자동차) / 논리나 개념(수학 공식, 프로그래밍 에러 ..)

ex) TV

참고) 객체를 사용한다. := 객체가 가지고 있는 속성과 기능을 사용한다.

 

 

클래스는 왜 쓰는걸까??

⇒ 설계도 하나만 잘 만들어 놓으면, 매번 제품을 만드는 일이 쉬워지기 때문에

⇒ 그냥 클래스로부터 객체를 생성해서 사용하기만 하면 된다.

핵심은 객체를 만들 때, 어떻게 만들어야 할지를 고민하지 않아도 된다는 것이다.

 

 

객체의 구성 요소

두 종류의 구성요소(속성, 기능)가 존재한다.

 

속성(property) := 멤버변수(variable)

     ex) TV 가로길이, 세로 길이, 볼륨, 채널, 색상

 

기능(function) := 메서드(method)

     ex) 볼륨 높이기, 볼륨 줄이기, 채널 변경하기, 켜기, 끄기

[용어 정리]
클래스로 객체를 만드는 과정 := instance 화
클래스로부터 만들어진 객체 := instance

코드를 통해 확인

가정)

  1. 먼저, 아래와 같은 Tv 클래스를 만든다.
    • class variable: 클래스가 Memory에 올라갈 때 생성된다.
    • instance variable: instace가 생성되었을 때 생성된다.
    • local variable: 변수 선언문이 수행되었을 때 생성된다. (메서드 내 변수를 뜻함)
      ⇒ instace variable이 각 인스턴스마다 각기 다른 값을 가진다.
      ⇒ class variable은 하나의 클래스(Tv)를 공유하기 때문에 항상 같은 값을 가진다.

Tv 클래스

2. Tv 클래스에 대한 instance를 만들기 위해 아래와 같이 참조변수를 선언한다.

Tv 인스턴스

내부 동작 원리

  1. Tv 클래스 타입의 참조변수 t를 선언
    ⇒ Memory에 참조변수 t를 위한 공간이 마련된다. (정확히 말하면, 콜스택이 main메서드 작업에 필요한 참조변수(t)의 메모리를 할당받아서 제공하며, 콜스택에 맨 아래에 있는 main메서드 내 Memory에 참조변수가 저장되는 것이다. )
  2. new 연산자를 통해 Tv 클래스의 instance 생성
    ⇒ Tv 클래스의 새로운 인스턴스가 (콜스택 내부) Memory의 빈 공간(주소 가정: 0x100)에 생성된다.
  3. 생성된 instance 내의 각 자료형이 기본값으로 초기화된다.
    color(참조형): null / power: false / channel: 0
  4. 대입연산자(=)에 의해 0x100주소값이 참조변수 t에 저장된다.
    ⇒ 각 instsance가 독립적으로 유지될 수 있다.
    ⇒ 서로 다른 참조변수도 대입연산자에 의해 같은 인스턴스를 가리킬 수 있다.

아~ 그래서, 참조변수 t를 통해 새로운 Tv instance에 접근 가능하구나!!

 

 

정리

멤버 변수

: Class 영역에 선언된 변수

: instance variable + static variable(=class variable)

 

static variable(=class variable, 정적 변수, 클래스 변수) 사용

: instace를 생성하지 않아도 바로 사용할 수 있다.

왜냐하면, class variable은 Class가 (콜스택으로부터 할당받은) Memory에 올라갈 때 이미 자동적으로 생성되기 때문이다.

 

설계

Class를 설계할 때, 멤버변수 중 모든 instance에 공통으로 사용되면 static을 붙인다. - static variable