일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- K8S
- 기술공부
- Flutter
- nestjs공부
- 스프링부트공부
- 플러터 공부
- 스프링 공부
- 카프카
- Kafka
- Axon framework
- JPA공부
- JPA 공부
- 코테공부
- 자료구조공부
- JPA스터디
- nestjs스터디
- 스프링부트
- 알고리즘공부
- 프로그래머스
- nestjs
- DDD
- 스프링공부
- 코테준비
- querydsl
- JPA예제
- 플러터 개발
- JPA
- 자바공부
- 스프링
- 기술면접공부
- Today
- Total
DevBoi
[Java] OOP(객체 지향 프로그래밍) 관련 공부 본문
OOP란 객체의 관점에서 프로그래밍하는 것을 의미한다.
프로그래밍에서 필요한 데이터를 추상화시켜, 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 중 하나이다.
장점
-코드 재사용이 용이
-유지보수가 쉽다.
-대형 프로젝트에 적합하다.
단점
-처리 속도가 상대적으로 느리다.
-객체가 많으면 용량이 커질 수 있다.
-설계시 많은 노력과 시간이 필요하다.
클래스 - 상태,행위,속성,변수 등을 정의한 것으로, 인스턴스가 생성의 설계가 되는 정보이다.
인스턴스 - 클래스를 바탕으로 생성되어 실제 메모리에 할당되어 사용되는 데이터이다.
특징
1.추상화
어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업
구체적인 사물들의 공통적인 특성을 파악해서, 하나의 개념으로 다루는 수단
2. 캡슐화
- 코드를 재수정없이 재활용 가능
- 접근 제어자를 통한 정보 은닉, 캡슐화를 통해 외부에 노출하지 않아야할 정보 또는 기능을 접근 제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근 하도록 할수 있다.
코드의 수정이 일어났을때, 책임이 있는 객체만 수정하면 되기에 여향 범위를 예측하는데 수월해졌다.
3. 다형성
오버라이딩, 오버로딩이 가능하다.
오버라이딩은, 상속의 개념이다.
부모 클래스의 속성과 기능을 그대로 이어받아 사용할수있고, 그 일부를 자식이 상속받아 수정하여 사용가능하다.
오버로딩은, 함수 구현관련된 내용이다.
4.일반화 (상속)
어떤 클래스의 일부 기능만 재사용하고 싶은 경우에 상위 클래스의 함수들을 위임받아서 사용한다.
또한 해당 기능을 재정의하여 사용할 수도있다. 이는 캡슐화의 일종이다.
<추가>
getter,setter 사용이유
메서드를 통한 변수의 값 조회로 인해, get할때, 특정 동작 뒤에 해당 값을 조작하여 줄수도있고,
특정 값 이상을 받고싶지않을때, 해당 setter메서드에서 예외처리를 해버릴수있는 기능들을 만들수있다.
즉, 변수에 대한 값을 직접 받거나 세팅하는 것이 아니라 메서드를 통해서 가공가능성을 두는 것이다.
이 가공가능성을 둠으로써, 직접적으로 변수호출이 아닌, 개발자가 원하는 방식으로 get,set을 하게된다.
OOP 5대원칙 SOLID
SRP - 단일 책임 원칙 : 한 클래스는 하나의 책임만 진다.
OCP - 개방 폐쇄 원칙 : 확장엔 열려있으나, 변경에는 닫혀있다.
LSP - 리스코프 치환 원칙 : 프로그램의 정확성을 깨뜨리지 않으면서, 하위 타입의 인스턴스로 바꿀수 있어야한다. (상위타입자리에 하위타입이 와도 오류가 나면 안된다.)
ISP - 인터페이스 분리 원칙 : 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스하나보다 낫다.
DIP - 의존관계 역전 원칙 : 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
'Language > [Java]' 카테고리의 다른 글
[Java] JIT 컴파일러 (0) | 2022.03.15 |
---|---|
[Java] Java 장단점 (0) | 2022.03.15 |
[Java] HttpSession에 대한 이해 (0) | 2022.02.21 |
[Java] 제네릭의 개념와 와일드 카드 (0) | 2022.02.20 |
[Java] Primitive Type, Wrapper Class (0) | 2022.02.20 |