절차지향(procedural programming)이란, 순차적인 처리가 우선시되며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다.
FORTRAN, COBOL, PASCAL, C ...etc
객체지향(Object-Oriented Language)란 컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법이다.
클래스의 내부변수와 메소드를 하나로 패키징하는 것
-> 정보 은닉 : 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다.
참고
https://blog.itcode.dev/posts/2021/08/08/encapulation
상속은 객체들간의 관계를 구축하는 방법이다.
코드를 재사용할 수 있다. : 하위 클래스는 상위 클래스의 메소드나 필드를 이용할 수 있습니다.
다형성 구현
but 상위클래스에 강하게 결합하기 때문에 변화 및 확장에 어려움을 겪을 수 있다.
따라서 상속은 클래스의 행동을 확장할 때가 아니라 정제할 때 사용하는 편이 좋습니다.
참고
https://steady-coding.tistory.com/451
다형성은 같은 모양의 코드가 다른 행위를 하는 것을 나타냅니다.
Overriding
메소드 오버라이딩은 상위 클래스의 메소드를 재정의하는 것을
Overloading
메소드 오버로딩은 한 클래스 내에 이미 사용하는 이름의 메소드가 있더라도 특정 규칙을 지킨다면 동일한 이름의 메소드를 정의하도록 허용하는 기술
참고
https://steady-coding.tistory.com/446
객체들의 고통 속성과 행위를 추출하는 것을 추상화라고 한다.
예를 들어 맥북과 삼성 노트북이 존재하면 둘다 노트북이라는 공통특징이 있기에 노트북이라는 속성과 행위를 추출해서 추상화 객체를 만드는 것과 같다.
참고
https://wpaud16.tistory.com/94
https://fierycoding.tistory.com/42
재사용성
상속으로 코드 재활용을 높일 수 있다.
생산성 향상
잘 설계된 클래스는 개발의 생산성을 높인다.
모델링의 쉬움
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현 가능.
유지보수의 우수성
프로그램 수정 시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉬워서 매우 경제적이라 할 수 있음.
느린 개발 속도
모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요됩니다.
느린 실행 속도
객체지향언어의 처리 속도는 절차지향언어보다 느립니다.
높은 난이도
객체지향언어는 대체로 난이도가 높습니다. 특히 다중 상속이 지원되는 c++는 악명이 높습니다.
JAVA,C++,swift,Python etc