본문 바로가기

카테고리 없음

객체 지향 프로그래밍

객체란?

객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별가능한 것을 말하며

객체는 각각의 상태나 행위를 필드와 메서드로 정의하고 있습니다.

 

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

이러한 각자의 역할을 지닌 객체들끼리 서로 메시지를 주고받으며 데이터를 처리할 수 있도록 프로그래밍 하는 것입니다.

 

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

1. 코드를 재활용하기가 좋습니다.

2. 상태나 행위의 처리가 한 곳에서 일어나기 때문에 유지 보수가 쉽습니다.

3. 유연하고 변경이 용이하기 때문에 대형 프로젝트에 적용히기가 좋습니다.

 

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

1. 서로 메세지를 주고 받으며 작업을 진행하기 때문에 처리속도가 상대적으로 느립니다.

2. 설계시 많은 시간과 노력이 필요합니다.

 

객체지향의 특징

  • 추상화
    • 객체에서 공통된 속성이나 기능을 추출하고 추출한 속성이나 기능을 묶어 이름을 붙이는 것입니다.
    • 우리가 필요한 정보들의 형태만 모아서 선언해주는 것이라고 할 수 있습니다.
  • 캡슐화
    • 관심있는 데이터와 기능을 모아놓고 패킹한 것이다.  내부의 데이터나 함수를 외부에서 참조하지 못하도록 차단하는 개념을 정보 은닉화(Information Hiding)라고 하며 접근제한자를 이용하여 객체의 필드와 메소드의 사용범위를 제한하여 외부로부터 보호합니다.
  • 다형성
    • 같은 코드라 하더라도 상황에 따라 다른 방식으로 동작하는 성질.
    • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
    • 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
    • Java에서 다형성을 구현할 수 있는 대표적으로 Overriding과 Overloading이 있다.
    • Overriding
      • 임의의 클래스가 다른 클래스를 상속 받거나 인터페이스를 구현했을 때, 상위 클래스 또는 인터페이스에 정의되어 있는 메소드를 재정의 하여 사용하는 것이다. 메소드 호출 시 재정의되어 있지 않다면 상위 클래스의 메소드가 호출된다. (인터페이스는 오버라이딩이 강제된다.)
    • Overloading
      • 메소드에 주어진 인자(parameter)에 따라 동작을 다르게 구현할 수 있다. 코드의 중복이 줄어들고, 가독성이 늘어난다. 반환 형(return type)은 관계가 없지만, 인자의 개수, 인자의 타입에 따라 다르게 구현할 수 있다.
  • 상속
    • 부모의 형질을 이어받는다는 의미로, 부모 클래스의 속성과 메소드를 그대로 활용할 수 있다. 여기에 더해 새로운 속성과 메소드를 추가할 수 있으며 같은 메소드라 하더라도 오버라이딩(Overriding)을 통하여 재정의하여 다르게 동작하게끔 할 수 있다. 손쉽게 클래스를 재활용할 수 있으며, 부모가 같은 클래스들을 동시에 처리하기 용이하다.

 

객체지향적 설계원칙 SOLID

  • SRP(Single Responsibility Principle)단일 책임 원칙
    • 클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
    • 변경을 했을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것
  • OCP(Open-Closed Principle) : 개방-폐쇄 원칙
    • 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
    • 다형성을 활용
    • 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 - 기존 코드를 변경한 것이 아니다.(확장) 
  • LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
    • 자동차 인터페이스의 엑셀은 앞으로 가라는 기능, 뒤로 가게 구현하면 LSP 위반, 느리더라도 앞으로 가게 구현해야 한다.
  • ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
    • 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스
    • 1개를 2개로 분리하면 인터페이스의 기능이 더욱 명확해지고, 대체 가능성이 높아진다.
    • 기능을 적당한 크기로 잘 나누는 것이 중요하다.
  • DIP(Dependency Inversion Principle) : 의존 역전 원칙
    • 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.
    • 클라이언트는 구현 클래스를 바라보면 안되고, 인터페이스를 바라보게 만들어야 한다.
    • 인터페이스에 의존을 해야 변경이 용이하다.

OCP, DIP 중요

 

 

Reference 


1. 김영한님 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

2. 블로그

https://jwprogramming.tistory.com/121

 

Java - (5) 객체란? 객체 지향 프로그래밍의 특징

객체란? : 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른것과 식별 가능한 것을 말합니다. 객체는 속성과 동작으로 구성되어 있다

jwprogramming.tistory.com

 

3. 블로그

https://devuna.tistory.com/3

 

[자바(JAVA) 개념]- 객체 / 객체지향 프로그래밍의 특징

자바는 대표적인 객체지향 프로그래밍 (OOP: Object Oriented Programming)언어이다. 여기서, 객체란 무엇일까? 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른

devuna.tistory.com

 

4. 블로그

https://jeong-pro.tistory.com/95

 

객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)

객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해

jeong-pro.tistory.com