[Programming] 객체 지향 프로그래밍이란?
Today I learn :)
객체 지향 프로그래밍이란?
프로그래밍에서 필요한 데이터와 기능을 추상화시켜 객체로 만들고
객체 간의 상호작용을 이용해 프로그램을 만드는 방법이다.
객체 지향 프로그래밍의 특징
- 추상화
- 가장 핵심적이고 공통된 부분을 간추려 내는 것
- 상속
- 기존 클래스가 가진 필드와 메서드를 새로운 클래스가 이용할 수 있게 하는 기능
- 새로운 클래스는 상속받은 데이터와 기능을 수정하거나 새로운 데이터와 기능을 추가할 수 있다
- 캡슐화
- 관련된 필드와 메서드를 하나로 묶는 것
- 구현 내용을 숨기고 인터페이스를 통해 사용하도록 하는 것
- 응집도가 높고 결합도가 낮아진다
- 다형성
- 하나의 요소를 다양하게 정의하고 상황에 따라 사용할 수 있다
- 오버라이딩, 오버로딩 형태로 제공
객체지향 프로그래밍의 장점은 무엇인가요?
- 코드 재사용이 쉽다
- 중복된 코드가 필요한 경우에 상속을 통해 클래스를 만들면 된다
- 추상화하여 클래스를 만들기 때문에 다양한 객체에 적용할 수 있다
- 코드 유지보수가 쉽다
- 부모, 자식 클래스에서 공통된 부분을 부모 클래스에서 한 번에 수정할 수 있다
- 대규모 프로젝트에 적합하다
- 클래스 간 결합도가 낮기 때문에 다수가 개발에 참여하는 경우 업무 분담하기 좋다
객체지향 프로그래밍의 단점은 무엇인가요?
- 많은 오버헤드가 발생한다
(오버헤드: 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등)- 객체 간 정보 교환이 모두 메시지 교환을 통해 일어나기 때문이다
- 객체가 상태를 갖기 때문에 버그가 발생할 가능성이 있다
- 내부 변수로 인해 객체가 예측할 수 없는 상태를 갖기 때문이다
- 함수형 프로그래밍의 등장 배경이 된다
- 상속을 통한 재사용의 단점
- 부모 클래스 변경이 어렵다
자식 클래스에게 영향을 주기 때문이다 - 클래스가 비대해진다
부모 클래스를 전부 상속받아야 하기 때문이다 - 잘못된 관계가 생긴다
자식 클래스가 부모 클래스와 IS-A 관계가 아닌 경우가 생길 수 있다
- 부모 클래스 변경이 어렵다
다시 읽어보고 생각해보자
- 객체-지향 프로그래밍 이란 무엇인가? (OOP)
- 객체지향 프로그래밍의 장점은 어떻게 구현하느냐에 달려있다는 내용
- 비객체지향과 비교를 해야 객체지향을 좀 더 이해할 수 있을 것 같다
- 프로그래밍과 추상화에 대하여
- 객체지향 뿐 아니라 모든 프로그래밍이 추상화 개념을 갖고 있고
캡슐화도 추상화의 다른 표현이라는 견해를 접하고 찾아본 글
- 객체지향 뿐 아니라 모든 프로그래밍이 추상화 개념을 갖고 있고
참고
위키백과_ 객체 지향 프로그래밍
객체 지향 프로그래밍이 뭔가요?
Object Oriented Programming
#객체 지향에 대한 이해/ 객체 지향적 설계
Leave a comment