객체지향 프로그래밍이란

김지현·2023년 11월 8일
0

JAVA

목록 보기
14/14
post-thumbnail

정의

객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간(메모리)을 의미하며 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것이다. 객체는 여러 군데에서 재사용이 가능한데 이는 부품화와 재사용성이라는 객체 지향 프로그래밍의 특징을 보여주기도 한다.

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임이다. 이를 지원하는 언어에는 C++ , C# , Java , Python , JavaScript , Ruby , Swift 등이 있다.

특징

추상화

추상화는 객체에서 공통된 속성과 행위를 추출하는 것이다. 즉, 같은 역할을 가지는 것들끼리 모아두는 것인데 이를 통해 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만들 수 있다.

  • EX) 추상화로 Car를 구현하면 자동차들이 가진 공통적인 특징들을 만들어서 활용할 수 있다. 또한 다른 자동차 브랜드를 추가하기도 쉬워진다. 다른 곳의 코드를 수정할 필요 없이 추가로 만들 부분만 새로 생성해주면 된다.

캡슐화

캡술화는 데이터 구조와 데이터를 다루는 방법들을 결합시켜서 묶는 것이다. 즉 변수와 함수를 하나로 묶어두는 것을 뜻한다. 속성과 기능을 정의하는 변수와 메서드를 클래스라는 캡슐에 넣어서 분류하면 재활용이 원활하고 정보은닉을 활용할 수 있다는 장점이 있다. 낮은 결합도를 유지하도록 설계하는 것이 좋다.

상속

속성은 클래스의 속성과 행위를 하위 클래스에 물려주는 것이다. 하위 클래스는 상위 클래스의 데이터와 연산을 이용할 수 있다. 재사용으로 인한 코드가 줄어들며 범용적 사용이 가능하다는 장점이 있지만 상위 클래스의 변경이 어려워지고 불필요한 클래스가 증가할 수 있다는 단점도 있다.

다형성

다형성은 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것, 즉 어떠한 요소에 여러 개념을 넣어놓는 것이다. 하나의 클래스 내부에 같은 이름의 행위를 여러 개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있다.

  • 오버로딩 : 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
  • 오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 재정의하여 사용하는 것

장점과 단점

장점

  • 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합
  • 유지 보수가 편리
  • 코드 재사용이 용이

단점

  • 처리 속도가 상대적으로 느림
  • 용량이 커질 수 있음
  • 설계시 많은 시간과 노력이 필요

SOLID (객체 지향 설계 원칙)

단일 책임 원칙 (SRP)

SRP(Single responsibility Principle) : 하나의 클래스는 단 하나의 책임만을 가져야 한다. 이를 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다.

개방-폐쇄 원칙 (OCP)

OCP(Open/Closed Principle) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다.

리스코드 치환 원칙 (LSP)

LSP(Liskov Substitution Principle) : 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상 작동 해야 한다.

인터페이스 분리 원칙 (ISP)

ISP(Interface Segregation Principle) : 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다. 범용 인터페이스 하나보다 여러 개의 인터페이스를 구성하는 것이 좋다. 인터페이스는 각 역할에 맞게 클라이언트를 기준으로 분리해야 한다. 각 클라이언트가 사용하지 않는 인터페이스의 변경이 있어도 영향을 받지 않도록 해야 한다.

의존관계 역전 원칙 (DIP)

DIP(Dependency Inversion Principle) : 구체화가 아닌 추상화에 의존해야 한다. 즉, 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.

profile
Server Developer

0개의 댓글