[Java] 객체 지향 (OOP)

LDB·2024년 10월 31일
0

Java

목록 보기
1/6
post-thumbnail

객체지향 언어의 탄생비화

80년도 초 소프트웨어 업계는 빠르게 변화하는 세상에 쫓아가지 못하고 있었다, 해결책으로 여러 가지 방법을 찾다가 객체지향을 도입하게 되었는데 기존의 절차적 프로그래밍이 아닌 객체 지향 프로그래밍으로 바꾸게 되니 코드의 재사용성은 높아지고 유지보수가 용이 해지며 중복 코드는 제거됨으로 오늘날까지 많이 쓰이고 있는 방식 중에 하나로 자리 잡게 되었다.

객체지향 언어 = 프로그래밍 언어 + 객체지향 개념

OOP (Object Oriented Programming)

컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 이론이다.

OOP 장점

  • 상속을 통해 코드의 재사용성이 증가.
  • 생산성의 향상.
  • 생각하고 있는 것을 자연스럽게 구현이 가능.
  • 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉬워졌다.

OOP 단점

  • 설계단계부터 많은 시간이 소모되어 개발속도가 느리다.
  • 실행 속도가 대체로 느리다.
    • Java 같은 경우에는 JVM위에서 프로그램이 실행되기 때문에 속도가 느립니다.
  • 코딩 난이도가 상승한다.
    • 다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

OOP의 특징

객체 지향 프로그래밍의 특징은 다음과 같이 나타낼 수 있다.

상속성, 다형성, 캡슐화, 추상화


상속성 (Inheritance)

기존 상위 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것을 말한다.

객체 지향을 공부 했다면 부모 클래스와, 자식 클래스라고 표현하는 것을 많이 들었을 텐데 말 그대로 부모가 자식에게 모두 상속해주는 것 처럼 부모 클래스자식 클래스에게 모두 상속해줌으로 써 코드의 중복을 없애준다.

상속은 다음과 같은 목적을 위해 사용한다.

  • 코드의 중복이 많아지면 개발 단계와 유지 보수에서 많은 비용이 들게 된다.
  • 자식 객체를 생성할 때 부모 클래스와 상속관계를 맺으면 부모 클래스의 속성들을 자동으로 물려받기 때문에 부모 클래스의 내용을 자식 클래스에서 또 정의할 필요가 없다.

다형성 (Polymorphism)

상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것을 말한다.

다형성에는 대표적으로 오버로드(overload)오버라이드(override)가 존재하는데 위의 행위를 하는 것을 오버로딩(overloading)오버라이딩(overriding) 이라고 한다.

  • 오버로딩(overloading)의 특징

    • 메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것
    • 리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다.
    • 같은 기능을 하는 메서드를 하나의 이름으로 사용할 수 있다.
    • 대표적으로 java를 처음배우면 반드시 적게되는 코드인 println() 메서드가 오버로딩 되어있기 때문에 int, String, boolean, char형 인자를 모두 받아 동작할 수 있다.

  • 오버라이딩(overriding)의 특징

    • 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 재창조 하는것 이다.
    • 부모클래스의 접근제어자 보다 같거나 넓은 접근제어자를 설정해야 한다.
    • 부모가 default 접근제어자인 경우 자식은 default, protected, public 중 하나로 접근제어자를 설정해야한다.


캡슐화 (Encapsulation)

데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법이다. 흔히 접근제어자 라고 불린다.

  • 접근제어자의 종류 및 접근 가능 여부
접근제어자같은패키지
일반 클래스
같은 패키지
자식 클래스
다른패키지
일반 클래스
다른패키지
자식 클래스
private접근 불가능접근 불가능접근 불가능접근 불가능
protected접근 가능접근 가능접근 불가능접근 가능
default접근 가능접근 가능접근 불가능접근 불가능
public접근 가능접근 가능접근 가능접근 가능

추상화 (Abstraction)

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

실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악해 필요없는 특성을 제거하는 과정이다.

추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라 할 수 있다.

참고 사이트

https://velog.io/@gillog/OOP객체-지향-프로그래밍

https://woo0doo.tistory.com/15

https://tcpschool.com/java/java_modifier_accessModifier

https://youtube.com/playlist?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글