객체 지향 프로그래밍(Object-Oriented Programming : OOP) 이란?
- 객체 지향 프로그래밍은 프로그래밍 패러다임 중 하나로,
데이터와 이를 처리하는 동작을 하나로 묶어서 객체라는 단위로 관리하고,
이러한 객체들의 상호작용으로 프로그램을 구성하는 방식이다.
- 객체는 상태와 행위를 가지며, 각 객체는 독립적으로 존재하며 다른 객체와 상호작용한다.
이러한 방식으로 프로그램을 작성하면 코드의 재사용성과 유지보수성이 높아지는 장점이 있다.
OOP에는 주요 개념 4가지가 있는데,
캡슐화(Encapsulation), 추상화(Abstraction), 상속(Inheritance), 다형성(Polymorphism)으로 구성 되어 있다.
캡슐화의 주 개념의 초점은 은닉화에 맞춰져 있다.
코드를 구현하는 세부 방식들은 모두 숨기고,
코드를 실행하는 부분만 노출을 시키는 것이다.그럼 객체의 상태를 외부에서 직접 접근 할 수 없도록 하고,
지정해 둔 메소드를 통해서만 상태를 변경 할 수 있도록 하는 것이다.이렇듯 하나의 객체안에 속성과 메소드를 묶어두면,
코드만 보고도 객체의 기능을 상상 할 수 있기에 유지 보수에 매우 능하다.
추상화는 캡슐화와 비슷하지만,
추상화의 주 개념은 인터페이스를 단순하게 하여
너무 많은 기능들이 노출되지 않게 하여 예기치 못한 변화를 일으키지 않도록 하는 것이다.
상속은 부모 클래스가 가지고 있는 속성과 메소드를
자식 클래스가 물려 받아 사용 할 수 있도록 하는 것이다.예를 들어, 사람이라는 클래스에 name, age, height등의 속성이 있다면,
학생이라는 클래스를 만들 때 이 사람 클래스를 그대로 물려받아,
(학생은 어차피 사람이니까)
코드의 재사용성과 유지보수성을 높일 수 있다.
다형성은 동일한 메소드가 서로 다른 클래스에서 다르게 구현 될 수 있도록 하는 것이다.
예를 들어,
도형 클래스를 상속받은 삼각형 클래스와 사각형 클래스가 있다고 가정해보자. 이때, 도형 클래스에는 getArea() 메서드가 있으며 삼각형 클래스와 사각형 클래스는 이 메서드를 각자 다르게 구현하고 있다.이때, 어떤 함수에서 도형 객체를 매개변수로 받아서 getArea() 메서드를 호출하면, 이 함수는 도형 객체가 삼각형 객체인지 사각형 객체인지 구분하지 않고 getArea() 메서드를 호출할 수 있다. 이렇게 여러 클래스가 동일한 메서드를 가지고 있지만 각자 다른 방식으로 구현할 수 있는 것을 다형성이라고 할 수 있다.