[Spring] OOP

김한준 Hanjun Kim·2024년 4월 11일
1

TIL(New)

목록 보기
7/9

기술면접 대비도 할 겸 OOP에 대해 한번 짚고 넘어가려고 합니다.


OOP(Object-Oriented Programming)

OOP란 말은 프로그래밍을 공부한다면 한번은 들어봤을만한 단어입니다.
단어의 뜻은 객체 지향 프로그래밍 이라고 합니다.

OOP는 현실 세계의 사물및 개념들객체로 보고, 그 객체들을 조립하여 프로그래밍 하는 기법입니다.
여러 부품들이 모여서 하나의 물건이 되듯, 프로그램을 객체들의 조합으로 만드는 기법입니다.

절차지향적 프로그래밍에서 있었던 코드의 재사용성과 중복제거가 가장 큰 목적으로 만들어진 기법이라고 하는데,

  • 절차지향적 : 일의 흐름에 중점을 두고 프로그래밍을 하는 기법.

이전 포스팅인 모놀리틱(https://velog.io/@wkdehf217/TIL-2kie63ad)에서도 나왔듯 OOP 또한 대규모 소프트웨어 개발 프로젝트에서 특히 유용하며, 코드의 유지보수성과 확장성을 향상시켜 생산성을 높이는데 기여합니다.


정리하자면,

- OOP의 장점

  1. 응집력이 높습니다.

    프로그램이 하는 일이 여러 객체가 모여서 이루어지기 때문에, 자잘한 알갱이가 모여있다고 생각하면 됩니다.

  2. 결합력이 낮습니다.

    객체들끼리 서로 각자 할일을 해도 프로그램이 잘 돌아가면, 결합력이 낮다고 표현합니다.
    의존적이지 않다는 말과 같습니다.

- OOP의 단점

  1. 실행 속도가 느립니다. ( 성능 저하 )

    객체지향은 객체와 클래스를 사용하므로 각각 독립성이 높습니다.
    여러 클래스들을 상속해서 사용하기 때문에 중복코드는 적지만,
    객체의 생성과 관리 등에 의해 리소스를 많이 사용하고
    몸집도 커지기 때문에 속도는 느려진다는 단점이 있습니다.

  2. 설계에 어려움이 있습니다.

    절차지향적과는 다르게 여러 객체들과 관계를 맺기 때문에
    설계 단계에서 많은 시간을 소모해 구조를 만들어야 합니다.


OOP의 특징 4가지

OOP의 장단점을 알아봤고, 대표적인 특징 4가지에 대해 정리하겠습니다.

1. 추상화

추상화 : 공통적인 부분을 모아서 추출해냄
ex1) 공책, 스케치북 -> '종이'라는 공통점이 있음
ex2) 추상클래스, 인터페이스

  • 목적과 관련이 없는 부분을 제외해서 필요한 부분을 포착하는 기법
  • 객체의 공통된 속성들 중 필요한 부분을 포착해서 클래스로 정의하는 설계 기법
  • 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것

2. 캡슐화

캡슐화 : 중요한 정보들을 캡슐로 싸서 숨기는것

  • 외부에 노출할 필요가 없는 데이터와 그 데이터를 처리하는 메서드(함수)를 하나로 묶는 것을 의미합니다.
  • 객체 내부의 동작 방식들은 숨기고, 외부에서 접근할 때는 공개된 인터페이스를 통해서만 접근할 수 있도록 합니다.
  • 높은 응집도, 낮은 결합도를 유지하여 유연함과 데이터의 무결성을 보호합니다.

3. 상속

상속 : 상속이라는 뜻 그대로 '부모'가 '자식'에게 물려주는 것
ex) 부모는 차 , 자식은 오토바이/자동차 등등

  • 한 클래스가 다른 클래스의 특성(속성과 메서드)을 상속받는 것을 의미합니다.
  • 코드의 재사용성을 높이고 클래스 간의 계층 구조를 형성하여 코드의 구조화를 촉진합니다.

4. 다형성

다형성 : 같은 형태를 가지고 있지만 다른 기능을 하는 것
ex1) 누군가에겐 아들, 누군가에겐 친척, 누군가에겐 회사원
ex2) 오버라이딩, 오버로딩

  • 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
  • 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
  • 오버로딩(Overloading) : 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
profile
개발이 하고싶은 개발지망생

0개의 댓글