❤ 객체지향

객체 지향은 기능이 아닌 객체(모든 사물,생명체)가 중심이며 "누가 어떤 일을 할 것인가?"가 핵심이 됩니다.
즉, 필요한 데이터를 추상화시켜 객체를 도출하고 그 객체들간의 역할을 정의해 나가는 것입니다.

 

절차 지향  대형 프로그래밍의 경우 많은 기능을 수반하기 때문에 절차 지향보다는 객체 지향이 적합
⦁ 각 객체가 하는 역할이 많아도, 많은 역할을 객체로 묶을 수 있기 때문
객체 지향  소형 프로그래밍의 경우 작은 기능을 수반하기 때문에 객체 지향보다는 절차 지향이 적합
⦁ 작은 기능을 객체별로 나눌 경우, 오히려 복잡해질 수 있기 때문

 

❤ 객체지향 장단점
장점 코드 재사용이 용이합니다.
이미 만들어진 클래스를 상속받거나 객체를 재사용하거나, 부분 수정을 통해 사용이 가능.
유지보수가 쉬웁니다.
수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
대형 프로젝트에 적합합니다.
클래스 단위로 모듈화(프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것)시켜서 개발 가능,그러므로 프로젝트처럼 여러명인경우 프로젝트를 개발할 때 업무 분담하기 쉽다.
단점  처리 속도가 상대적으로 느립니다. (캡슐화 때문에 절차지향과 비교하면 실행 속도가 느리다.
❤ 객체지향 특징
추상화
(abstraction)
- 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
- 클래스를 정의하는 것=추상화 (but 클래스가 없는 객체지향 언어도 존재 ex.JavaScript)
캡슐화
(encapsulation)
- 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것
실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
- 코드가 묶여있어서 오류가 없어 편리하다.
상속성
(inheritance)
- 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것 (객체지향 방법의 중요한 기능)
오버라이딩(Overriding) : 자식 클래스가 상속 받은 부모 메소드를 재작성 하는것(메서드의 내용만 변경 하는 것), 자식 객체를 통한 실행 시 후손(부모) 것이 우선권을 가짐
다형성
(polymorphism)
- 동일한 이름으로 약간 다른 방법으로 동작하는 함수를 호출하는 것
오버로딩(Overloading) : 한 클래스 내에 동일한 이름의 생성자, 메소드를 여러 개 작성 하는것 
(but 매개변수 타입,갯수,순서가 달라야함)
동적바인딩
(Dynamic Binding)
-실행 이후에 값이 확정되는것
- 실행 시간에 실제로 사용된 객체의 클래스형에 의해 호출될 함수가 결정됩니다
- 함수가 가상 함수로 선언이 되면, 포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다

- 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장(다형성 실현)

 

'Language > Java' 카테고리의 다른 글

필드 - 제어자  (0) 2022.10.12
Spring - IoC(Inversion of Control)  (0) 2022.09.12
Spring  (0) 2022.09.11
스레드  (0) 2022.03.10
입출력 (Stream)  (0) 2022.03.03