Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로세스 제어 블록
- 커널 모드
- Non-Preemptive
- 프로세스
- 경량 프로세스
- Process Control Block
- 유저 모드
- 은행원 알고리즘
- 인터락 함수
- 뮤텍스(Mutex)
- The Banker's Algorithm
- Activity
- 교착 상태
- Multi-level Queue
- 방금 그 곡
- Light Weight Process
- Heap영역
- 임계 구역
- 블로킹 논블로킹
- 모니터(Monitor)
- 문맥 교환
- 프로세스 상태 전이도
- The DIning Philosopher Problem
- Reentrant
- 유저 모드의 동기화
- 동기 비동기
- Stack영역
- 커널 모드의 동기화
- 스레드 동기화
- 스레드
Archives
Blog For Me
[자바]객체지향 프로그래밍 본문
객체지향 프로그래밍이란?
컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
여기서 객체라는 용어가 처음에 와닿지 않았다. 객체의 정의를 살펴보면, 클래스 모양 그래도 생성된 실체가 객체라 되어 있다. 그렇다면 클래스는 또 무엇인가? 클래스는 객체를 만들어 내기 위한 설계도 혹은 틀이라 되어 있다. 다시 말해서, 클래스는 어떠한 객체의 변수, 메소드의 집합이며 현실세계로 빗대면 연관되어 있는 속성과 행위들의 집합이라고 볼 수 있다.
예를 들어, 아이폰이라는 클래스가 있다고 하면, 아이폰이 지니고 있는 여러 특징들을 지니고 있음을 생각해 볼 수 있다. 제작사는 애플, 운영체제는 ios 등의 특징들을 지닌다. 그리고 아이폰에는 여러 기종들이 있는데, 대표적으로 아이폰 12, 아이폰 12 프로, 아이폰 13 등등이 있다. 인터페이스에서 차이가 존재하고, 여러 기종들을 거치면서 업데이트 된 기능들도 있겠지만, 이들은 아이폰이라는 큰 틀 내에 속해있다고 볼 수 있다.
또 다른 예시를 들자면, 사람이라는 클래스가 있을 때, 손흥민, 방탄소년단 진, 김연아 등은 모두 객체라고 볼 수 있다.
이를 코드로 표현해보자면 다음과 같다.
public class Person{
String name;
int age;
String job;
public void work() {
}
}
public class Main{
public static void main(String[] args) {
Person Jin = new Person(); // '진'이라는 Person 객체 생성
Person Son_Heung_Min = new Person(); // '손흥민' 이라는 Person 객체 생성
Person Kim_Yuna = new Person(); // '김연아' 라는 Person 객체 생성
}
}
절차 지향 vs 객체 지향
- 절차 지향은 프로그램을 기능중심으로 바라보는 방식으로, "이 일을 어떠한 절차로 처리할 것인가?" 라는 질문이 핵심이다. 다시 말해, 어떤 기능을 어느 순서대로 처리하는가에 중점을 두고 있다. 예를 들어, 자동차를 6명이서 만든다는 가정 하에, 6명 모두가 엔진, 바퀴, 핸들, 의자, 엑셀, 몸체 순서대로 만들자고 합의하고 실제로 앞에서 정한 순서대로 자동차를 만드는 방식이다.
- 객체 지향은 객체가 중심이 되는 방식으로, "누가 어떤 일을 맡아서 할 것인가?" 라는 질문이 핵심이다. 다시 말해, 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다. 예를 들어, 역시 똑같이 자동차를 6명이서 만든다는 가정 하에, 자동차를 만드는 순서에 얽메이지 않고, 한 객체는 바퀴를 만들고, 또 다른 객체는 몸체를, 이외에 엔진, 엑셀, 의자, 핸들을 각각 한 명씩 제작하여 독립적으로 일을 진행하고 이들을 조립하여 완성하는 방식이라 할 수 있다.
- 절차 지향 vs 객체 지향
- 대형 프로그램의 경우에는 많은 기능을 수반하므로 절차 지향보다는 객체 지향이 더 적합하다. 왜냐하면 각 객체가 하는 역할이 많아도, 많은 역할을 객체로 묶을 수 있기 때문이다.
- 소형 프로그램의 경우에는 적은 기능을 수반하기 때문에 객체 지향보다는 절차 지향이 더 적합하다. 적은 기능을 객체별로 나누면, 오히려 복잡해져서 처리 속도가 더 느려질 수 있기 때문이다.
객체 지향 프로그래밍의 장단점
장점
- 코드의 재사용성이 높다. 누군가가 만든 클래스를 가져와 사용할 수 있고, 상속을 통해 확장할 수 있다.
- 유지보수가 쉽다. 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메소드로 존재하므로, 해당 부분만 수정하면 된다.
- 대형 프로젝트에 용이하다. 클래스 단위로 모듈화해서 개발할 수 있으므로, 업무 분담이 더 편하다.
- 자연적인 모델링이 용이하다. 일상생활에서 쓰는 개념을 그대로 객체라는 구조로 표현하여 개발함으로써, 생각한 것을 그대로 구현할 수 있다.
단점
- 처리 속도가 상대적으로 느리다.
- 객체가 많으면 용량이 커져 처리해야 할 데이터 양이 증가할 수 있다.
- 설계 시 많은 노력과 시간이 소요된다.
'언어 > 자바' 카테고리의 다른 글
[자바] 객체지향(oop) 특징 4가지 (0) | 2022.02.13 |
---|
Comments