객체 지향 프로그래밍(OOP)이란?

2023. 10. 27. 19:34개발/JAVA

728x90

객체 지향 프로그래밍(Object Oriented Programming)

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 프로그램을 만드는 것이다.

 

즉 기능이 아닌 객체가 중심이며 누가 어떤 일을 할 것 인가?가 핵심이다.

 

특징으로는 추상화, 상속, 다형성, 캡슐화 등이 있다.

 

1.  추상화(Abstraction)

객체의 공통적인 속성과 기능을 추출하여 정의하는것이다.

 

예시로 자동차와 오토바이를 생각해보자.

자동차와 오토바이는 이동 수단이며 모든 이동 수단은 전진과 후진을 할 수 있다는 공통점이 있다.

이것을 자바 문법 요소를 사용하여 표현하면

자동차와 오토바이의 공통적인 기능을 추출하여 이동수단 이라는 인터페이스에 정의한다.

인터페이스는 어떤 객체의 역할만을 규정하고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하도록 설계하는 것을 의미. 

이것을 객체 지향 프로그래밍에서는 역할과 구현의 분리라고 한다.



2.  상속(Inheritance)

기존 상위 클래스의 속성과 기능을 가져와 하위 클래스에서 재사용 하는 것을 의미한다.

 

3.  다형성

어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질이다. 다형성을 구현하는 대표적인 방식에는 오버로딩, 오버라이딩이 있다.

  • 오버라이딩 : 상위 클래스에 있는 메소드를 하위 클래스에 재정의 하는 것
  • 오버로딩 : 매개변수의 개수나 타입을 다르게하여 같은 이름의 메소드를 여러 개 정의 하는 것

4.  캡슐화

서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것

 

클래스와 인스턴스(객체)란?

클래스는 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할 수 있고, 객체를 생성하는데 사용한다.

객체는 설계도(클래스)를 기반으로 생성되며, 자신의 고유 이름과 상태, 행동을 갖는다.

여기서 상태는 필드(fields), 행동은 메소드(Method)라고 표현한다.

객체에 메모리가 할당되어 실제로 활용되는 실체는 인스턴스 라고 부른다.

 

객체 지향 프로그래밍의 장, 단점에는 무엇이 있을까?

  • 장점:
    • 코드 재사용이 용이하다.
      • 남이 만든 클래스를 가져와서 사용할 수 있고, 상속을 통해 확장해서 사용할 수 있다.
    • 유지보수가 쉽다.
      • 객체 지향 프로그래밍은 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 그 부분만 수정하면 된다.
    • 대형 프로젝트에 적합.
      • 클래스 단위로 모듈화 시켜 개발할 수 있으므로, 여러명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.
  • 단점:
    • 처리 속도가 상대적으로 느리다.
    • 객체가 많으면 용량이 커질 수 있다.
    • 설계시 많은 시간과 노력이 필요하다.

 

 

728x90