OOP

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

OOP의 4대 특성

추상화 인터페이스로 공통적인 특성들을 묶어 표현하는 작업
캡슐화 연관성이 있는 변수와 메소드를 클래스로 묶는 작업

[캡슐화의 목적]

  1. 코드를 재수정 없이 재활용하는 것
  2. 접근 제어자를 통해 정보를 은닉하는 것 → 코드의 수정이 일어날 때, 책임있는 객체만 수정할 수 있게 됨 | | 상속 | 자식 클래스가 부모 클래스의 특성과 기능을 물려받거나 재정의를 통해 재사용성을 높히는 작업

다중 상속은 불가능하다. → 필요에 따라 인터페이스를 사용할 수 있다. | | 다형성 | 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

class Person{} class Man extends Person {} → Person man = new Man(); // 허용 |

OOP의 장단점

| 장점 | 1. 코드 재사용이 용이하다

  1. 유지 보수가 쉽다
  1. 대형 프로젝트에 적합
  1. 객체의 개수가 많아지면 용량이 커진다

  2. 설계시 많은 시간과 노력이 필요하다 |

절차 지향 프로그래밍 vs 객체 지향 프로그래밍

절차 지향 프로그래밍 객체 지향 프로그래밍
데이터 중심의 함수를 구현하여 프로그램을 순차적으로 처리하는 기법 기능 중심으로 데이터와 기능을 하나로 묶어 개발하는 방법
속도가 빠르다 코드의 재활용성이 높다
코드의 순서가 바뀌면 올바른 결과를 보장하기 어렵다 설계하는데 시간이 오래 걸린다

클래스와 인스턴스

http://jameskim79.ipdisk.co.kr:8000/apps/wordpress/java-클래스-객체-인스턴스의-차이/

클래스 인스턴스
어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐
집단에 속하는 속성 & 행위를 → 변수 & 메소드로 정의한 것 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것
객체를 만들기 위한 메타 정보라고 볼 수 있다. 실제 프로그램에서 사용되는 데이터
클래스는 설계도 객체는 설계도로 구현한 모든 대상

객체와 인스턴스

http://jameskim79.ipdisk.co.kr:8000/apps/wordpress/java-클래스-객체-인스턴스의-차이/

객체 인스턴스
클래스의 타입으로 선언된 것 객체가 메모리에 할당되어 실제 사용되는 것
객체는 실체 에 초점을 둔다. 인스턴스는 관계 에 초점을 둔다.
Animal cat; cat = new Animal();
// Animal 클래스의 객체를 메모리에 할당

객체 지향 설계 5원칙 SOLID

https://limkydev.tistory.com/77 https://www.youtube.com/playlist?list=PLDV-cCQnUlIZcWXE4PrxJx6U3qKfRTJcK

SOLID 원칙은 클래스 자신안의 응집도는 내부적으로 높히고, 외부 클래스간의 결합도는 낮추는 High Cohesion - Loose Coupling 원칙 을 객체 지향 관점에서 도입한 것이다.