객체 지향
왜 객체 지향이 필요했을까??
초창기에는 주로 과학실험이나 미사일 발사실험과 같은 모의실험(simulation)을 목적으로 사용되었다.
이 시절의 과학자들은 simulation을 위해 실제 세계와 최대한 유사하게 가상 세계를 컴퓨터 속에 구현하고자 했었는데, 이러한 노력 긑에 객체지향 이론이 탄생했다.
객체 지향 이론의 기본 개념
: 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이라는 것이다.
이 후 상속, 캡슐화, 추상화 등을 중심으로 구체적으로 발전되었다.
그 끝에 1960년 중반, 이러한 객체 지향 이론을 프로그래밍 언어에 적용한 최초의 객체지향언어인 Simula가 탄생한 것이다.
객체 지향 언어
: 객체 지향 이론을 프로그래밍 언어에 적용한 것
그래서 왜 쓸까??
- 코드의 높은 재사용성
- 코드의 용이한 관리
- 신뢰성 높은 프로그래밍
클래스와 객체
- 객체 지향하면, 클래스와 객체에 대한 개념이 빠질 수가 없다.
클래스란??
: 객체를 정의해 놓은 것 or 객체의 설계도(틀)
ex) TV 설계도
⇒ 객체를 생성하는 데 사용
객체란??
: 실제로 존재하는 것
ex) 사물들(책상, 의자, 자동차) / 논리나 개념(수학 공식, 프로그래밍 에러 ..)
ex) TV
참고) 객체를 사용한다. := 객체가 가지고 있는 속성과 기능을 사용한다.
클래스는 왜 쓰는걸까??
⇒ 설계도 하나만 잘 만들어 놓으면, 매번 제품을 만드는 일이 쉬워지기 때문에
⇒ 그냥 클래스로부터 객체를 생성해서 사용하기만 하면 된다.
핵심은 객체를 만들 때, 어떻게 만들어야 할지를 고민하지 않아도 된다는 것이다.
객체의 구성 요소
두 종류의 구성요소(속성, 기능)가 존재한다.
속성(property) := 멤버변수(variable)
ex) TV 가로길이, 세로 길이, 볼륨, 채널, 색상
기능(function) := 메서드(method)
ex) 볼륨 높이기, 볼륨 줄이기, 채널 변경하기, 켜기, 끄기
[용어 정리]
클래스로 객체를 만드는 과정 := instance 화
클래스로부터 만들어진 객체 := instance
코드를 통해 확인
가정)
- 먼저, 아래와 같은 Tv 클래스를 만든다.
- class variable: 클래스가 Memory에 올라갈 때 생성된다.
- instance variable: instace가 생성되었을 때 생성된다.
- local variable: 변수 선언문이 수행되었을 때 생성된다. (메서드 내 변수를 뜻함)
⇒ instace variable이 각 인스턴스마다 각기 다른 값을 가진다.
⇒ class variable은 하나의 클래스(Tv)를 공유하기 때문에 항상 같은 값을 가진다.
2. Tv 클래스에 대한 instance를 만들기 위해 아래와 같이 참조변수를 선언한다.
내부 동작 원리
- Tv 클래스 타입의 참조변수 t를 선언
⇒ Memory에 참조변수 t를 위한 공간이 마련된다. (정확히 말하면, 콜스택이 main메서드 작업에 필요한 참조변수(t)의 메모리를 할당받아서 제공하며, 콜스택에 맨 아래에 있는 main메서드 내 Memory에 참조변수가 저장되는 것이다. ) - new 연산자를 통해 Tv 클래스의 instance 생성
⇒ Tv 클래스의 새로운 인스턴스가 (콜스택 내부) Memory의 빈 공간(주소 가정: 0x100)에 생성된다. - 생성된 instance 내의 각 자료형이 기본값으로 초기화된다.
color(참조형): null / power: false / channel: 0 - 대입연산자(=)에 의해 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
'학교 수업' 카테고리의 다른 글
[학교 수업] 4장 8번 과제 변형 (0) | 2023.10.05 |
---|