본문 바로가기

DevOps

[JAVA]객체지향이론

객체지향언어

1. 객체지향이란?

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

- 실제 사물의 속성(Attribute)기능(Method)을 분석한 다음, 데이터(변수)와 함수로 정의하는 것.

- 상속, 캡슐화, 추상화 개념을 중심으로 점차 구체적으로 발전



2. 특징

- 코드의 재사용성이 높다.
 : 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.


- 코드의 관리가 용이하다.

 : 코드간의 관례를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.


- 신뢰성이 높은 프로그래밍을 가능하게 한다.

 : 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한

  오동작을 방지할 수 있다.



3. 클래스와 객체(Class and Object)

- 클래스란? 

 정의 : 객체를 정의 해놓은 것. 또는 객체의 설계도/틀

 용도 : 객체를 생성하는데 사용된다.


- 객체란?

  정의 : 실제로 존재하는 것, 우리가 주변에서 볼 수 있는 것 핸드폰, 책상, 마우스, 노트북과 같은 사물들이 곧 객체이다.

           프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.


- 클래스와 객체의 관계

 : 우리가 살고 있는 실생활에서 예를 들면, 제품 설계도와 제품과의 관계라고 할 수 있다. 예를 들면, TV설계도(클래스)는 제품(객체)을 정의한 것며, TV(객체)를 만드는데 사용된다.


- "객체를 사용한다"는 것

: 객체가 가지고 있는 속성과 기능을 사용한다는 의미


- 클래스 정의 후 객체를 생성하는 이유

 :  하나의 설계도만 잘 만들어 놓으면 제품을 만드는 일이 매우 쉬워진다. 이와 마찬가지로 클래스를 한번만 잘 만들어 놓기만 하면,

   매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할지를 고민하지 않아도 된다. 그냥 클래스로 부터 객체를 생성해서 사용하기만

   하면 된다.



4. 객체와 인스턴스(Object and Instance)

 :  클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의  인스턴스(instance)라고 한다.

 

    결국 인스턴스는 객체와 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터  만들어진 것인지를 강조하는 보다 구체적인 의미를 갖고 있다.

 

5. 객체의 구성요소 - 속성과 기능

 : 객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있다. 

 속성(Property) - 멤버변수(Member Variable), 특성(Attribute), 필드(Field), 상태(State)
 기능(Function) - 메서스(Method), 행위(Behavior), 함수(Function)


6. 클래스의 또 다른 정의

- 객체지향관점이 아닌 프로그래밍 관점에서 클래스의 정의와 의미


6-1. 클래스 - 데이터와 함수의 결합

변수(Variable) --> 배열(Array) --> 구조체(Structure) --> 클래스(Class)


변수 : 하나의 데이터를 저장할 수 있는 공간

배열 : 같은 종류의 여러 데이터를 저장할 수 있는 공간

구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간

클래스 : 데이터와 함수의 결합(구조체 + 함수) 



6-2. 클래스 - 사용자정의 타입(User-defined Type)

서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 사용자정의 타입이라고 한다.


7. 변수와 메서드(Variable and Method)

7-1. 선언위치에 따른 변수의 종류

- 변수의 종류

: 클래스변수, 인스턴스변수, 지역변수

- 변수의 규칙

: 멤버변수를 제외한 모든 변수는 지역변수이며, 그 중에서도 static이 붙은 것은 클래스 변수, 그렇지 않은 것은 인스턴스변수 라고 한다.

- 인스턴스변수(Instance Variable)

클래스 영역에 선언 되며, 클래스의 인스턴스를 생성할 때 만들어진다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야하는 속성(Member Variable)의 경우, 인스턴스 변수로 선언해야 한다.


- 클래스변수(Class Variable)

클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 붙이기만 하면 된다. 인스턴스변수와 다르게 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다. 그래서 클래스 변수를 공유변수(Shared variable)이라고 한다.

클래스 변수는 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있다. "클래스이름.클래스변수"와 같은 형식으로 사용할 수 있다. 클래스가 로딩(Loading in Memory)될 때 생성되어 프로그램이 종료될 때 까지 유지되며, public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역 변수(Global variable)의 성격을 갖는다.