Posts [Java] OOP개념 및 특징
Post
Cancel

[Java] OOP개념 및 특징

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

  • 프로그래밍에서 필요한 데이터를 추상화 시켜 객체를 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법론
  • 예를 들어 C++과 Java가 있다.

OOP의 장단점

OOP의 장점

1) 재사용성이 높다

  • 남이 만든 클래스를 가져와서 사용할 수 있고 상속을 통해 확장해서 사용할 수도 있으므로

2) 유지보수가 쉽다

  • 캡슐화를 통해 주변 영향이 적기 때문에

3) 대형 프로젝트에 적합하다.

  • 클래스 단위로 모듈화시켜 개발할 수 있으므로 여러 사람이 개발에 참여하는 대형 프로젝트에 적합함

OOP의 단점

1) 실행 속도가 상대적으로 느리다.

  • 객체를 많이 만들어 놓으니 절차지향언어에 비해 실행 속도가 상대적으로 느리다.
  • 절차지향 언어는 초기 프로그래밍 언어로 컴퓨터의 처리 구조와 비슷해 실행속도가 빠르다.

2) 설계시 많은 시간과 노력이 필요하다.

  • 다양한 객체들의 상호작용을 통해 프로그램이 구성되므로 설계에 많은 시간과 노력이 필요하다.

절차 지향 프로그래밍(PP: Procedure Programming)

  • 프로그램 실행 절차에 중점을 둔 프로그래밍 방법론
  • 예를 들어, C언어가 있다.

절차 지향 프로그래밍의 장단점

절차 지향 프로그래밍의 장점

1) 초기 프로그래밍 언어로 컴퓨터의 처리 구조와 비슷해 실행 속도가 빠르다.

절차 지향 프로그래밍의 단점

1) 코드 실행 순서에 기반을 두고 함수 중심의 모듈로 구성되있으므로 재사용성이 떨어진다.
2) 함수 단위로 이루어지기에 프로그램이 커지면 매우 복잡해져 유지보수성이 떨어진다

객체 지향 프로그래밍과 절차 지향 프로그래밍의 비교

1

출처: https://velog.io/@9rganizedchaos/2020114-TILOOP

OOP의 4가지 특징

1) 캡슐화

  • 클래스를 통해 변수와 메소드를 하나로 묶음으로써 접근제어자를 활용하여 외부에 노출할 필요가 없는 정보들을 은닉하는 것이다.

왜 정보은닉이 필요한가?

SW공학에서 요구사항 변경에 대처하는 고전적인 설계 원리

  • 높은 응집도와 낮은 결합도를 가져야 요구사항 변경에 유연하게 대처할 수 있다.
  • 응집도(Cohension): 클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지
  • 결합도(Coupling): 어떤 기능을 실행하는데 다른 클래스나 모듈들에 얼마나 의존적인지

Note: 즉, 캡슐화는 정보은닉을 함으로써 높은 응집도와 낮은 결합도를 갖도록 하여 요구사항 변경에 유연하게 대처할 수 있도록 한다.

  • 정보 은닉은 private 키워드를 사용하여 필요가 없는 정보는 외부에서 접근하지 못하도록 제한함으로써 이뤄진다. 이를 통해, 결합도를 낮출 수 있다.
  • 결합도가 높을 수록 문제가 많이 발생한다. 한 클래스가 변경이 발생하면 이에 의존하는 다른 클래스들에 문제가 발생할 가능성이 커지게 되기 때문이다.
  • 예제 블로그

2) 상속

  • 부모 클래스의 기능을 물려받아 확장하는 것이다.
  • 클래스 간의 다중 상속은 모호성의 문제로 불가하지만 인터페이스 간의 다중 상속은 가능하다.

3) 추상화

  • 어떤 영역에서 공통된 속성들 중 필요한 부분만을 포착해서 인터페이스나 추상클래스로 설계하는 것이다.
  • 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것이다.
  • 각 개체의 구체적인 개념에 의존하지 않고 추상적 개념에 의존해야 설계를 유연하게 변경할 수 있다.

4) 다형성

1) 하나의 객체에 여러 가지 타입을 대입할 수 있다는 것

  • 다형성을 통해 현재 어떤 클래스 객체가 참조되는지와 무관하게 프로그래밍을 할 수 있다
  • 예시) Cat과 Dog는 Animal이란 타입으로도 대입하여 사용 할 수 있다.

2) 메시지에 의해 객체가 연산을 수행할 때, 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 것이다.

  • 오버로딩(Overloading): 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
  • 오버라이딩(Overriding): 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 기술

출처

This post is licensed under CC BY 4.0 by the author.