OPP 객체지향 프로그래밍

rjsghl92·2022년 5월 11일
0

객체지향 언어(OOP)

과거 언어는 절차 지향적으로 설계 되어있었으나, 시대의 흐름에 따라
절차 지향적 언어의 낮은 효율로 인해 객체 지향적 언어를 사용하게 되었다.
객체 지향 언어란 다음과 같이 표현 할 수있는데,

객체 지향언어 = 프로그래밍 + 객체지향개념(규칙)

기존의 언어에서 추가적인 개념이나 규칙이 추가 된 것이라 볼 수있다.
이러한 객체 지향언어의 핵심적 특징은 다음과 같다.

1.캡슐화

1.상속

1.추상화

1.다형성

객체(Object) & 클래스(Class)

객체는 만들려고자 하는 하나의 사물과도 같고 클래스는 이 제품의 설계도와도 흡사하다.
객체 = 기능 + 속성 // 의 형태를 가지고 있고 여기서 기능은 다양한 변수를 기능은 메서드라고 볼 수있다.

예를 들어 TV라는 객체가 있을 때, 이 TV의 설계도를 클래스 라고 하고

속성(변수)에는 TV의 크기, 길이, 색상 등등
기능(메서드)에는 볼륨 조절, on & off, 채널변경 등 이라고 할 수있다.

객체의 생성에 있어서 아래와 같은 코드를 자주 보게 되었는데, 처음엔 조금 이해가 어려운 부분이 있었다.

TV tv= new TV();

대소문자의 차이만 있을 뿐 같은 단어로 표현 되어있어서 그런 감이 없지않아 있는데, 이것을 풀어보면

TV tv;   // Tv 클래스 타입의 참조변수 tv선언,
tv = new TV();  // Tv 인스턴스 생성 후,  인스턴스 주소값을 tv에 저장

위와 같이 볼 수있는데, 저기서 tv는 새로 만들어진 인스턴스 new TV()의 리모콘이라고 볼 수있다.
우리는 앞으로 저 인스턴스주소값을 지정한 리모콘을 통해 TV의 속성과 기능을 조정 하게 되는 것이다.
그리고, 그 TV의 속성과 기능을 담은 설계도가 클래스이다.

클래스 = 설계도 / 데이터(구조체) + 함수 / 사용자 커스텀 타입

필드(Field) & 메서드(Method)

변수는 선언 된 영역에 따라

클래스 영역: iv(인스턴스 변수), cv(클래스 변수)
메서드 영역: lv(지역 변수)

위와 같이 나뉘는데, 클래스 변수는 공통된 값으로 클래스 안에서 값을 가지고,
인스턴스는 객체 마다 다른 값을 가진다.
예를 들어 트럼프카드를 두고 보았을 때, 카드의 크기와 뒷면의 문양 등은 모든 카드가 같으므로 클래스 변수를 가지고, 카드의 그림은 숫자에 따라 문양에 따라 다르기 때문에 인스턴스 변수를 가진다.

메서드란 글래스안에 있는 작업단위의 문장들의 묶음 과 비슷하다.
흡사 수학시간의 함수 상자같은 역할로 일정 정보를 입력받으면 그 상자 안의 함수처리를 해서 값을 내뱉는 것이다.

메서드 = 선언부 + 구현부

선언부에는 반환타입, 메서드 명, 입력값이 들어온다.
ex

int add (num1, num2) // 반환타입 = int ,메서드 명 = add, 입력값 = num1,num2

구현부에는 입력값을 처리 해줄 수행코드가 들어간다.
ex

{int result = num1 + num2;
return result;}

또한, 이러한 메서드 내에 선언된 변수를 지역변수(lv)라고 한다.

생성자(Constructor)

-인스턴스가 생성될 때 마다 호출되는 '인스턴스 초기화 메서드'
-인스턴스 생성 시 수행 할 작업(iv초기화)에 사용
생성자는 클래스와 이름이 같아야 하고, 리턴 값이 없다.

기본 생성자(defalt constructor)

매개 변수가 없고, 생성자가 하나도 없다면 기본 생성자(defalt constructor)가 생성된다.

생성자this()

-생성자에서 다른 생성자를 호출 할 떄 사용
-첫줄에서만 사용가능 하다.
-생성자의 내부에서만 사용할 수 있다.

*참조변수 this

여기서 사용되는 this는 위의 생성자 this()와는 전혀 다른 의미이며, 같지 않다.
this는 자신을 가르키는 참조변수이며, 인스턴스 메서드안에서 사용이 가능하다.

0개의 댓글