일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 프로그래머스 #JAVA #코딩테스트 #다음에 올 숫자 #코딩
- JAVA #객체지향언어 #절차지향언어 #코딩 #Python #C #C++ #객체지향 #절차지향
- 프로그래머스 #자바 #java #코딩테스트 #연속된 수의 합 #코딩
- Today
- Total
Javadocs
[ Java ] 객체 지향(OOP) vs 절차 지향(PP) 본문
매번 공부를 하게 되면 따라 다니면서 나를 괴롭히던 개념인 객체 지향, 절차 지향!!!
이번 기회로 제대로 공부해서 정리를 해보려고 한다.
1. 절차지향언어(Procedural Programming)
절차지향 프로그래밍이란 ?
말 그대로 절차를 따라 물 흐르듯 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적으로 C, Fortran 등이 있습니다.
점차적으로 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생하게 됩니다. 이러한 이유 객체지향 언어가 등장하게 되는 계기가 됩니다.
1) 절차지향의 장점
- 컴퓨터의 처리구조와 유사해서 실행속도가 빠르다.
2) 절차지향의 단점
- 유지보수가 어렵다.
절차에 따라 순차적으로 처리한다는 말은 하나가 고장이 난다면 전체적으로 문제가 생긴다는 말이다. 전체적으로 문제가 발생하기 때문에 문제를 해결하기 위해서는 일부분만 수정을 할 수 없습니다.
이처럼 유지보수가 매우 까다로우며, 특히 디버깅과정이 어렵습니다.
- 순서가 정해져 있어서 비효율적이다.
실행하는 순서가 정해져 있어서 코드의 순서가 바뀐다면 결과값을 보장할 수 없다.
- 코드가 길어지면 가독성이 떨어지며 이해하기 어렵다.
- 대형 프로젝트에 적합하지 않다.
소프트웨어의 위기
80년대 초 소프트웨어의 위기가 오면서 소프트웨어의 급격한 발전을 이루게 된다. 그로 인해 빠른 변화를 쫓아오지 못하고 복잡해진 프로젝트들은 더 이상 절차지향 프로그래밍을 통해 소화할 수 없었고 품질이 낮아졌다. 그에 대한 해결책으로 객체지향언어를 도입하게 된다.
2. 객체지향언어(Object-Oriented Language)
객체지향언어란?
프로그램을 다수의 객체로 만들고, 객체끼리 서로 상호작용하도록 만드는 프로그래밍 언어이다.
쉽게 생각해서 여러 컴퓨터 부품들을 구매하여 하나의 컴퓨터를 만들어 제대로 작동하도록 만드는 것입니다. 여기서 각 부품들이 객체가 됩니다,
대표적인 예로 JAVA, C++, C#, Python 등이 있다.
1) 객체지향언어의 특징( 캡슐화, 상속, 추상화, 다형성 )
- 캡슐화 (Encapsulation)
관련된 데이터와 알고리즘을 하나로 묶어 하나의 캡슐처럼 만드는 것이다. 이러한 특징 때문에 데이터와 코드의 형태를 외부에서 알 수 없다. 캡슐화된 객체들은 다른 프로그래머가 사용하기 편리하고 수많은 테스트와 디버그를 마쳤기 때문에 안심하고 사용할 수 있다.
- 상속 (Inheritance)
상위 클래스의 모든 것을 하위 클래스가 모두 이어 받는것을 말한다. 즉, 부모가 자식에게 물려주듯이 부모의 특징을 자식에게 모두 물려준다. 위에서 말한 기존 코드를 재활용해서 사용하는 것을 의미하기도 한다.
- 추상화 (Abstraction)
객체의 공통적인 속성과 기능을 추출하여 정의하는 것.
즉, 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정을 가르킨다.
- 다형성 (Polymorphism)
상속과 연관된 개념으로 하나의 객체가 다른 여러 객체로 재구성 하는 것을 말한다.
서로 다른 타입에 속하는 객체들이 같은 이름의 멤버 함수에 응답하여 서로 다른 동작을 보여주는 것이 가능하다. 그로 인해 코드가 더 간단해지는 효과가 있다.
JAVA의 오버로드(Overload) 또는 오버라이드(Override)이 다형성의 대표적인 예라 할 수 있고, 이것을 구현하는 것을 오버로딩(Overloading)과 오버라이딩(Overriding)이라 한다.
2) 객체지향의 장점
- 코드의 재사용성이 높다. - 상속이 가능하기 때문에 코드를 재사용할 수 있어서 편리하다.
- 유지보수가 용이하다. - 프로그램 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기 때문에 유지 보수가 쉽다.
- 생산성 증가 - 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킨다.
3) 객체지향의 단점
- 개발속도가 느리다.
- 실행속도가 느리다.
- 코딩 난이도가 올라간다.
'Programming > Java' 카테고리의 다른 글
[Java] toString()과 String.valueOf() 비교 및 차이점 (0) | 2023.04.01 |
---|---|
[ Java ] JVM(자바 가상 머신)이란? (0) | 2023.03.25 |
3. Java 프로그래밍 기본 (0) | 2023.03.01 |
2. 자바언어의 특징 (0) | 2023.03.01 |
1. 컴퓨터 구조의 이해 (0) | 2023.02.28 |