컴퓨터언어를 공부하다보면 자주 보이는 말들이 있다. 바로 함수형 프로그래밍, 객체지향 프로그래밍! 항상 이리저리 검색하다가 보기만 했었는데 오늘!!! 객체지향프로그래밍에 대해서 알아보도록 하겠습니다!
객체 지향 프로그래밍 (Object-Oriented Programming) 줄여서 OOP로 통용되는 개념은 많은 유명한 프로그래밍 언어(Java, C++, C#, Python, PHP, Ruby, Object-C)는 객체지향 프로그래밍을 지원한다. 많은 프로그래밍언어가 지원을 한다는 것은 다른지향 프로그램들과는 다른 장점을 가지고 있지 않을까??? 라는 생각이 든다. 그럼우선 객체지향의 특징과 장점을 알아보도록 하겠습니다!
OOP의 특징은 네가지로 나뉜다. 캡슐화, 상속, 추상화, 다형성이다. 이것이 객체지향프로그래밍의 전부이다. 객체지향프로그래밍이 무엇이냐? 라고 묻는다면 이 네가지를 떠올리면 된다. 이제 각각 무엇을 의미하고있는지 알아보도록 하자!
캡슐화 (Encapsulation)
캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미한다. 따라서 클래스를 우리가 만들 때 훗날 이클래스에서 만들어진 객체가 특정한 목적을 가지고 사용해야할 변수와 그 변수를 가지고 특정한 액션 즉 메서드 또는 함수를 관련성 있게 클래스에 구성해야한다.
그리고 또 하나의 특징은 바로 정보의 은닉화이다. 캡슐화를 통해 변수에 접근하는 것을 막을 수 있다. 보여서는 안되는 사용자의 정보에 접근할 수 없도록 할 수 있는 것이다.
상속 (Inheritance)
객체지향프로그래밍에 있어서 상속이란 개념은 무엇보다도 가장 중요한 개념이라고 생각된다. 상속이란 부모객체로부터 속성과 메서드를 상속받는 자식객체를 생성할 수 있다는 것이다. 이것이 의미하는 바는 하나의 부모객체를 통해 여러자식객체를 생성함으로써 재사용성을 기대할 수 있다.
추상화 (Abstraction)
추상화란 공통점을 찾아 일반화하고 단순화하는 것이다. 이를 객체에 적용하면 공통점으로 일반화한 객체를 생성하고 그 객체를 상속, 재사용할 수 있게 하는 것이다.
다형성
부모클래스로 부터 상속받은 메소드를 재정의(오버라이팅)하는 것이라고 생각한다. 각각의 인스턴스들의 필요(특징)에 맞추어 메소드를 오버라이팅 하는 것이다.