티스토리 뷰

Web/BackEnd

객체지향 프로그래밍 - OOP

Codecheck 2024. 3. 10. 10:22

 

OOP란?

OOP(Object-Oriented Programming)는 필요한 데이터추상화하여 속성행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

데이터를 중심으로 필요한 기능을 함수로 구현하는 방식의 절차 지향 프로그래밍과 달리, OOP에서는 데이터와 함수들을 묶고 이를 객체로 관리한다.

 

절차 지향 프로그래밍에서 데이터가 돈, 제품이라고 하면, 데이터와 행위를 별도로 생각하기 때문에

데이터에 대한 모든 행위를 '돈을~', '제품을~'과 같이 표현한다.

 

하지만 현실세계에서 데이터를 통해 어떤 행위를 할 때, 목적의 대상이나 주체가 정해져 있는 경우가 많다.

예를 들면, '고객이 돈을~', '기계가 제품을~'과 같은 경우이다. 이는 데이터와 행위를 묶어 표현하는 객체지향을 사용하면 더 효과적으로 표현할 수 있다.

OOP의 4가지 특징

OOP의 4가지 특징에는 캡슐화, 추상화, 상속, 다형성이 있다.

1. 캡슐화 

객체의 속성과 행위를 하나로 묶고, 구현 코드를 외부에 감춰 은닉 하는 것을 뜻한다.

다시 말하면 데이터와 처리 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것이다.

 

캡슐화는 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향할 수 있게 도와준다.

모듈화는 모듈 단위의 코드 재사용이 가능하기 때문에, 코드 유지 보수에도 도움을 준다.'

 

예를 들어보자면, 리모컨을 사용하는 사람이 리모컨의 내부 회로까진 알 필요가 없다.

따라서 사용자의 입장에서는 리모컨의 조작 기능, 즉 public으로 정의된 속성만 아는 것이 이상적이다.

2. 추상화

중요하고 필요한 정보만을 표현하기 위해서, 객체의 공통적인 속성과 행위를 하나로 묶는 것을 의미한다.

즉, 불필요한 세부 정보를 제거하고 목적과 관련된 중요한 부분만을 효과적으로 표현하기 위한 개념이다.

예를 들면 자동차, 열차, 비행기 등 여러 교통 수단이 있다고 하자.

이중 공통적인 요소나 특징을 추출하면 "교통수단"에 해당하는 요소를 추상화 할 수 있다. 

3. 상속

상위 클래스에서 정의된 기능을 가져와 재사용 하거나, 새로운 기능을 추가해 코드의 중복을 줄이고 재사용성을 늘릴 수 있는 방법을 의미한다.

예를 들면, 포유류 클래스가 있다고하면, 강아지 클래스를 정의하는 경우 포유류 클래스를 상속하여 포유류 클래스의 특성을 사용할 수 있고, 필요한 경우 강아지 클래스에 해당하는 내용을 추가해줄 수 있다.

4. 다형성 

객체가 상속을 통해 기능을 확장, 변경하여 여러 형태의 객체로 재구성 되는 것을 의미한다.

즉, 형태가 같은데 다른 기능을 할 수 있게 하는 것이다.

Overriding과 Overloading을 통해 다형성을 확보할 수 있다.

• Overriding : 상위 클래스에 동일한 이름을 가진 함수가 있을 때, 하위 클래스에서 기능을 재정의 하는 것을 의미한다.

• Overloading : 하나의 클래스 안에 같은 이름을 가진 함수를 여러개 만들 수 있게 해준다. 구분을 위해 함수의 인자들은 달라야 한다.

예를 들면, 동물클래스가 있고, 여기에 roar()라는 메서드가 있다고 하자.

동물들의 울음소리는 각각 다르기 때문에, 상속을 이용하지 않고 정의하면 

roarCat(), roarDog()과 같이 정의해주어야 한다.

하지만 다형성을 이용하면 @Overriding을 이용해 재정의함으로써 각 객체마다 roar()가 다르게 동작하도록 할 수 있다.

OOP의 장/단점

장점

• 높은 코드 재사용성 : 다형성이 있고, 캡슐화를 통해 모듈화가 가능하기 때문에

• 생산성 향상 : 캡슐화로 객체의 독립성이 높기 때문에

• 자연적 모델링 가능 : 일상의 언어와 유사하다는 장점이 있기 때문에

• 유지 보수의 우수성 : 캡슐화로 객체의 독립성이 높고, 다형성이 있어 기능 변경이 용이함

단점

• 개발 속도가 느림 : 모델링 과정에서 시간이 오래 걸리기 때문에

• 절차 지향에 비해, 실행 속도가 느림 : 클래스를 확인 후, 실행되기 때문에

• 객체가 많아짐에 따라 용량이 커짐 : Instance의 증가로 인한 문제점

'Web > BackEnd' 카테고리의 다른 글

네트워크 기본 - IP란?, IP주소, PORT, DNS, URL, URI  (0) 2024.03.12
객체지향 프로그래밍 - SOLID 원칙  (0) 2024.03.09
JPA란? Spring Data JPA란? Hibernate란?  (1) 2024.01.02
Mybatis란?  (0) 2024.01.02
SQL Mapper와 ORM  (1) 2024.01.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함