OOP

김성현·2021년 2월 26일
0

객체지향 프로그래밍

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고 객체들의 상호작용을 통해 프로그램이 동작하는 하는 방식이다.

객체

모든 인스턴스를 대표하는 포괄적인 의미로, oop의 관점에서 클래스 타입으로 선언된 것을 말한다.

객체 : 소프트웨어 세계에 구현할 대상
클래스 : 구현하기 위한 설계도, 추상화
인스턴스 : 소프트웨어 세계에 구현된 실체

등장배경

기존의 절차적 프로그래밍 방식에서 함수를 통해 중복코드의 제거와 코드 재사용성으로 어느정도의 복잡도는 해결되었다.(Top-down) 하지만 함수는 데이터의 처리 방법을 구조화했을뿐, 데이터 자체는 구조화하지 못했다. 이후 프로그램의 복잡도가 다시 점점 증가하면서 전역 네임스페이스 포화 문제(변수 이름을 다 써서 이름 짓기도 힘든 상황)와 실행 콘텍스트를 저장할 수 있는 방법이 없는 문제가 발생하게 된다.

이를 극복하기 위한 대안으로 등장한 것이 바로 객체 지향 프로그래밍이다. 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법을 도입한 것

Procedural Programming의 잘못된 인식
한국어 번역으로 절차적 프로그래밍으로 불리기 때문에 마치 절차적으로 실행하는 것이 중점이 되는것처럼 보이기도 한다. 하지만 애초에 절차적이지 않은 프로그래밍은 존재하지 않는다. Procedural의 Procedure는 '절차'라는 의미가 아니라 '프로시저'의 의미이다. 따라서 이 패러다임의 본질은 프로시저 콜, 즉 함수 호출을 통해서 추상화와 재사용성을 얻어내는 것이다.

객체 지향 4가지 특징

추상화
추상화라는 말은 구체적인 것을 제거한다라는 말이다. 따라서 객체들이 가진 공통의 속성이나 기능을 추출하고 불필요한 정보는 제거하여 간단히 만드는 것이다.

캡슐화
변수와 함수를 하나의 단위로 묶는 것(데이터 번들링), 해당 클래스의 인스턴스 생성을 통해 클래스 안에 포함된 멤버 변수와 메소드에 접근할 수 있다.

정보 은닉(Information Hiding)
객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법으로 외부에 노출된 특정 메소드(ex, getter, setter)를 통해서만 접근 가능하다. 프로그램의 내부 구현을 외부로 드러내지 않게 감추는 것으로 모듈 내의 응집도를 높이고 모듈 간의 결합도를 낮추어 유지보수를 높인다.
보통 캡슐화와 정보 은닉을 묶어서 생각하는 경우가 많은데, 정보 은닉은 캡슐화로부터 파생된 보조 개념이지 '캡슐화 = 정보 은닉'은 아니다.

상속
새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 것으로, 상속을 통해 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.

기존 클래스: 부모 클래스, 상위 클래스, 기반 클래스
새로운 클래스: 자식 클래스, 하위클래스, 파생 클래스

다형성
여러 가지 형태를 가질 수 있는 능력이다.

오버라이딩: 부모 클래스의 메소드를 재정의 하는 것으로 함수 이름, 매개변수, 반환형이 같다.
오버로딩: 같은 이름의 메소드를 여러 개 정의하는 것으로 인자의 개수나 자료형이 다르다.

더 공부할 내용

동적 바인딩
객체 지향 프로그램이 복잡해지면서 이를 간결하게 정리할 필요성이 생긴 관계로 '디자인 패턴'이라는 것이 생겼다.

profile
JS개발자

0개의 댓글