[Programming] Object Oriented Programming(OOP, 객체 지향 프로그래밍)
Object Oriented Programming(OOP, 객체 지향 프로그래밍)
- 더 나은 프로그래밍을 만들기 위한 프로그래밍 패러다임
- 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것
- 클래스를 이용하여 연관 있는 데이터 부분(변수)와 처리부분(함수)를 묶어서 객체(인스턴스)를 생성하여 프로그래밍화 한다
- 이러한 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체 지향 프로그래밍
- C언어의 경우, 절차 지향 프로그래밍언어로
프로세스가 함수 단위로 순서대로 진행되어 프로그램화 되어 있다
Object(객체)
- 물리적으로 존재하거나(자동차, 책, 사람 등등), 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것을 지칭
- 속성(필드)과 메소드(동작)으로 구성된 객체로 모델링 할 수 있음
Class(클래스)
- 같은 종류의 객체의 속성과 행위를 정의한 것
- 자동차, 사람, 책, 등등 객체들이 공통적으로 갖는 속성들을 모아서 정의내린 것
Method(메서드)
- 클래스로부터 생성된 객체를 사용하는 방법
- 객체의 속성을 조작하는 데 사용
- e.g. 자동차의 기능, 사람의 역할, 등등
OOP의 특징
Encapsulation(캡술화)
- 하나의 객체에 대해, 해당 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미
- 클래스를 우리가 만들 때, 이 클래스에서 만들어진 객체가 특정한 목적을 잘 수행할 수 있도록 사용해야할 변수와 해당 변수를 가지고 특정 메서드를 관련성 있게 클래스로 구성해야한다
정보은닉
- 유저 정보를 가지고 있는
User
라는 객체에서 유저의 정보가 Public으로 선언되어 있으면, 누구나 해당 정보를 확인하고 변경가능성이 있음
- 따라서, Private하도록 데이터를 보호해서 접근을 제한
Abstraction(추상화)
- 목적과 관련이 없는 부분을 제거하여 필요한 부분만 표현하기 위한 개념
- 큰 틀의 클래스를 구현하고, 해당 클래스 안에 객체들의 공통적인 요소나 필수적인 요소들을 담는 것을
추상클래스
- e.g. BMW5d(BMW), A7(아우디), K5(기아) 등등의 자동차객체
- 벤더사가 다르다고 해서 클래스를 각각 만들 필요 없다
- 자동차의 본연의 기능들을 공통요소로 보고 메서드를 만듦
- 만든 메서드를 모아 클래스로 만듦
- 추상화란 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법
Inheritance(상속성, 재사용성)
- 객체지향에서 상속이란,
기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있도록 도와주는 개념
- 즉, 기존 클래스에서 기능을 가져와 재사용할 수 있으면서도, 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있다
- 상속이 필요한 이유는 코드의 중복을 없애기 위함
- e.g. 포유류 클래스, 고양이 클래스, 강아지 클래스
- 고양이와 강아지는 모두 포유류
- 포유류라는 클래스는 고양이 클래스와 강아지 클래스에 자신의 속성들을 물려줌 상속
- 포유류 클래스와 고양이,강아지 클래스는 상속 관계
Polymorphism(다형성)
- 형태가 같은데 다른 기능을 하는 것을 의미
- 즉, 같은 동작이지만 다른 결과물이 나올 때 '다형' 이라 한다
- e.g. 고양이 클래스의 '울음' 이라는 메서드(속성)
- 사자는 고양이과로서 사자 클래스는 고양이 클래스를 상속받을 수 잇음
- 사자 클래스에서도 '울음' 이라는 메서드를 사용 가능
- 하지만 고양이와 사자의 '울음'은 다른 객체