상세 컨텐츠

본문 제목

객체 지향 프로그래밍

갭알/WEB

by ranlan 2021. 3. 16. 22:54

본문

728x90

 

컴퓨터 프로그래밍 패러다임 중 하나

컴퓨터 프로그램을 여러 개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

각각의 객체는 메세지를 주고 받고 데이터를 처리할 수 있음

 

 

구성 요소

클래스(Class)

같은 종류의 집단에 속하는 속성(Attribute)와 행위(Behavior)를 정의한 것으로 독립적으로 디자인 해야함

 

객체(Object)

클래스의 인스턴스

상위 클래스의 속성을 가지고 있으면서 개별적인 특성과 행위 또한 가지고 있음

클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로, 실제 프로그램에서 사용되는 데이터

 

메서드(Method)

클래스로부터 생성된 객체를 사용하는 방법으로 객체의 속성을 조작하는 데 사용

객체 간의 통신은 메시지를 통해 이루어짐

* 메시지

객체에게 일을 시키는 행위로 메세지를 받을 객체 이름, 메서드 이름, 인자 등을 포함한 데이터 블럭 (데이터의 논리적 단위)

다른 객체와의 상호작용을 할 수 있도록 함

메시지 내용 분석 → 메시지 수행 → 결과 반환

 

 

 

특징

1. 동적 바인딩

실행 시간에 바인딩 됨으로써 상속이나 다형성 실현

 

* 바인딩
- 각종 값들이 확정되어 더 이상 변경될 수 없음.
- 프로그램 소스에 쓰인 각종 내부 요소(배열, 변수 등)의 식별자가 그 대상인 메모리 주소, 데이터형 또는 실제 값으로 배정되는 것
- 함수 호출을 해당 함수의 정의와 결합, 즉 함수가 위치한 메모리 번지로 연결시켜 주는 것

  (프로그램 실행 → 함수 호출 → 함수가 저장된 주소로 점프 → 함수 실행 → 원래 위치)

 

동적 바인딩 : 런타임에 성격이 결정되는 것
                    실행 파일을 만들 때 바인딩 되지 않고 보류 → 점프할 메모리 번지를 저장하기 위한 메모리 공간을 가지고 있다가 런타임에 결정

                    단점) 타입 체킹으로 인한 수행 속도 저하 / 메모리 공간 낭비

 

정적 바인딩 : 컴파일 시간에 바인딩 되는 것

 

 

2. 캡슐화

데이터와 데이터를 처리하는 함수를 하나로 묶는 것

객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작할 수 없고 외부에서 접근할 수 있도록 정의된 메서드 이용

예) getter, setter

 

 

3. 정보은닉

캡슐화를 통해 얻는 중요한 장점 중 하나로 다른 객체에 자신의 정보를 숨기고 자신의 연산만을 통하여 접근 가능하게 함

- 오류 최소화

- 객체에 포함된 손상과 오용을 막을 수 잇음

- 객체 내부의 조작 방법이 바뀌어도 사용 방법은 바뀌지 않음

- 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성을 유지할 수 있음

- 처리된 결과만 사용함으로 객체 이식성에 좋음

- 유지보수, 확장 원활

 

 

4. 다형성

여러 객체에서 동일한 명령을 내렸을 때 서로 다르게 반응하는 현상

- 메서드 오버라이딩 : 상속 시 부모클래스의 메서드와 같은 이름, 같은 매게변수를 재정의 하는 것

- 메서드 오버로딩 : 같은 이름의 함수를 여러 개 정의하고, 매게변수의 타입과 개수를 다르게 하여 그에 따라 다르게 호출할 수 있게 하는 것

구분 오버라이딩 오버로딩
메서드 이름 동일 동일
매개변수 동일 다름
리턴 타입 동일 상관없음

 

- 인터페이스

기본 설계도

모든 메서드가 추상 메서드인 경우

생성자를 가질 수 없으며 객체로 생성 불가능

해당 인터페이스를 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할

(구현 객체가 같은 동작을 한다는 것을 보장하기 위한 목적)

 

- 추상 클래스

미완성 설계도클래스로 클래스 내에 추상 메서드가 한 개 이상 포함되거나 abstract로 정의된 경우

따로 객체를 생성할 수 없으며 상속을 통해 자손 클래스에서 완성하도록 유도

공통적인 기능을 하는 객체들의 추상화

더보기

추상메서드: 내용이 없는 메서드로 구현하지 않고 선언만 한 상태

 

* 자바는 특성상 한 개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고 할 수 있는 기능들을 인터페이스로 구현

 

 

5. 상속

부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있으며

기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받아 다시 수정하여 사용할 수 있음

 

* 다중상속

2개 이상의 클래스로부터 상속받을 수 있게 하는 기능

클래스의 상속 관계에 혼란(*다이아몬드 문제)을 줄 수 있고 프로그래밍 언어마다 사용 가능 여부가 다름으로 주의

*JAVA에서는 지원하지 않으나(인터페이스 다중 상속은 지원) C++, 파이썬 등은 지원

 

다이아몬드 문제

 

 

 

장점

코드 재사용 용이 - 만들어진 클래스  사용 가능하며  상속을 통해 확장해서 사용 가능

유지보수가 쉬움 - 수정해야 할 부분이 클래스 내부에 멤버변수 혹은 메서드로 있기 때문에 해당 부분만 수정하면 됨

대형 프로젝트에 적합 - 클래스 단위로 모듈화 시켜 개발 가능함으로 많은 인원과 각각의 개발이 필요한 프로젝트에서 업무 분담이 쉬움

직관적인 코드 분석 가능

 

 

 

단점

처리 속도가 상대적으로 느림

객체가 많으면 용량이 커짐

설계 시 많은 시간과 노력 필요

728x90

'갭알 > WEB' 카테고리의 다른 글

[WEB] 템플릿 엔진이란  (0) 2021.03.27
인자(Argument)와 매개변수(Parameter)  (0) 2021.03.20
VO vs DAO vs DTO  (0) 2021.03.13
[SPRING] Gradle vs Maven  (0) 2021.03.13
[WEB] 스프링 프레임워크(Spring Framework)  (0) 2021.03.13

관련글 더보기

댓글 영역