본문 바로가기
JAVA

[JAVA] 객체 지향 프로그래밍

by s0y0un9 2023. 5. 30.

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

우리가 실생활에서 쓰는 모든 것을 객체라고 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것이다.
객체 지향 프로그램은 객체와 객체 간의 연결로 되어 있으며 각각의 객체 안에 자료구조와 알고리즘이 들어있는 것이다.

 

객체 지향 vs 절차 지향

객체 지향

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

객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점

 

절차 지향

프로그램을 기능중심으로 바라보는 방식으로 무엇을 어떤 절차로 할 것인가? 가 핵심

어떤 기능을 어떤 순서로 처리하는가에 초점

 

 

객체 지향 프로그래밍의 특징

1. 추상화 (abstraction)

객체들의 공통적인 특징/기능/속성을 도출하는 것이다.

객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다.

 

2. 캡슐화 (encapsulation)

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

외부로부터 클래스에 정의된 속성과 기능들을 보호하고 (데이터 보호), 필요한부분만 외부로 노출될 수 있도록 (데이터 은닉) 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 것이 목적이다.

객체들 간의 의존도를 낮게 만드는 것이 중요하다.

 객체 내의 모듈 간의 요소가 밀접한 관련이 있는 것으로 구성하여 응집도를 높이고 결합도를 낮추는 것이 좋은 설계이다.

 

3. 상속성 (inheritance)

이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것이다.

상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능을 사용할 수 있다.

기존 코드를 재활용해서 사용함으로써 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근할 수 있다.

 

4. 다형성 (polymorphism)

 

객체 지향 프로그래밍의 꽃이라고 할 수 있다. 🌸

어떤 객체의 속성이나 기능이 맥락에 따라 다른 역할을 수행할 수 있다.

약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것이라고 볼 수 있다.

한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다.

상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 하는 것이다.

더보기

📌 오버라이딩(Overriding), 오버로딩(Overloading)

  • 오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
  • 오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

 

객체 지향 프로그래밍의 장점

  • 코드 재사용 용이 : 클래스를 재사용하거나 상속을 통해 확장할 수 있기 때문
  • 유지보수가 쉬움 : 클래스 단위로 수정이 가능하기 때문
  • 대형 프로젝트에 적합 : 많은 기능들을 역할별로 객체로 묶을 수 있기 때문

 

객체 지향 프로그래밍의 단점

  • 처리 속도가 절차지향 프로그래밍과 비교하면 상대적으로 느림
  • 객체가 많으면 용량이 커질 수 있음
  • 설계 시 많은 시간과 노력이 필요

 

'JAVA' 카테고리의 다른 글

[JAVA] 코딩 컨벤션  (0) 2023.05.18
[JAVA] 리팩토링  (0) 2023.05.09
[JAVA] 메소드  (0) 2023.05.09

댓글