객체지향
객체
객체는 현실 세계를 모델링한 개념이고, 객체 내에는 명사형의 상태와 동사형의 메서드가 존재한다.
-> 물리적인 특성
위와 같은 말로 객체는 데이터와 그 데이터를 조작하는 프로시저로 구성된다.
실제로 객체를 정의할 때 사용되는 것은 객체가 제공해야 할 기능이며, 객체가 내부적으로 어떤 데이터를 갖고 있는 지로는 정의되지 않는다.
-> 객체의 핵심은 기능을 제공하는 것
객체지향 패러다임
- 적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것
- 점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임 중요성 높아짐
- 중요 포인트
- 클래스가 아닌 객체에 초점을 맞추는 것 (?)
- 객체들에게 얼마나 적절한 역할과 책임을 할당하는지
객체지향 4가지 특징
1. 추상화
2. 다형성
3. 캡슐화
4. 상속
https://charactermail.tistory.com/313
https://charactermail.tistory.com/314?category=1084018
https://charactermail.tistory.com/320?category=1084018
상속
상속은 좀 더 일반적인 클래스에서 그보다 구체적인 클래스가 여러개 생길 수 있는 경우에 사용한다.
상속을 통한 방법은 결합도가 강하기 때문에, 코드의 재사용의 목적으로는 사용하지 않는 것이 좋다.
가상화
가상화 : 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 하는 것
하이퍼바이저
- Virtual Machine Manager(VMM)
- 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
도커
컨테이너 기반 가상화 플랫폼
컨테이너(상위 개념) - 격리된 공간에서 프로세스가 동작하는 기술.
기존의 가상화 방식은 주로 OS를 가상화 했었음. (하이퍼바이저 기반의 가상화(OS가상화) vs 컨테이너 기반의 가상화)
DB
트랜잭션 : 트랜잭션이란 데이터베이스 상태를 변경하는 논리적인 단위이다.
트랜잭션 내에서 실행한 작업들은 모두 실행되거나 실행되지 않아야 한다.
https://charactermail.tistory.com/384
DB Index 관련
결론 : 인덱스는 카디널리티가 높고, 선택도가 낮은 컬럼에 거는 것이 효율이 좋다.
카디널리티 : 특정 데이터 집합의 유니크한 값의 개수, 성별 데이터인 경우 남,여 존재하고 유니크한 값(카디널리티)은 2개이다.
선택도 : = 컬럼의 특정 값의 row 수 / 테이블의 총 row 수 * 100
= 컬럼의 값들의 평균 row 수 / 테이블의 총 row 수 * 100
https://soft.plusblog.co.kr/87
Spring
n+1 : https://maivve.tistory.com/340
ORM : Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
JPA : Java Persistence API, 자바 진영의 ORM 기술 표준
SQL 개발 중심의 문제점 : 객체와 관계형 데이터베이스의 페러다임의 불일치가 가장 큰 문제.
자바는 객체지향 페러다임으로 만들어졌고, 관계형 데이터베이스는 데이터를 정규화해서 잘 보관하는 것을 목표로 한다.
JPA는 ORM 기술의 표준 명세로 자바에서 제공하는 API이다.
JPA 사용시 장점 :
1. 특정 데이터베이스에 종속되지 않음
2. 객체지향적 프로그래밍
3. 생산성 향상
JPA 사용시 단점
1. 복잡한 쿼리 처리
2.성능 저하 위험
3. 학습 시간
MSA
RabbitMQ : 메시징 큐잉 서버
Kafka : 메시징 큐잉 서버
Appache Software Foundation의 Scalar 언어로 된 오픈 소스 메시지 브로커 프로젝트.
실시간 데이터 피드를 관리하기 위해 통일된 높은 처리량, 낮은 지연 시간을 가지는 플랫폼을 제공한다.
모든 시스템으로 데이터를 실시간으로 전송하여 처리할 수 있는 시스템.
데이터가 많아지더라도 확장이 용이한 시스템
Producer/Consumer 분리
메시지를 여러 Consumer에게 허용
디자인패턴
스트래티지 패턴(Strategy Pattern) : 알고리즘군을 정의하고 각각을 캡슐화하여 사용할 수 있도록 만든다.
스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
서버
WAS
톰캣 :
1. Servlet Interface(Spec) 구현체
2. Servlet Container 중 하나
테스트 코드 실습
자바 단위 테스팅 프레임워크
JUnit5
AssertJ : 테스트 코드 가독성을 높여주는 자바 라이브러리
테스트 코드를 작성하는 이유>
1. 문서화 역할
2. 코드에 결함을 발견하기 위함
3. 리팩토링 시 안정성 확보
4. 테스트 하기 쉬운 코드를 작성하다 보면 더 낮은 결합도를 가진 설계를 얻을 수 있음
디자인패턴 & 리팩토링
리팩토링과 디자인 패턴이 정답은 아니다.
이렇게 하면 좋고, 이렇게 하면 좀 더 객체지향적이고 이렇게 하면 좀 더 유지보수가 쉽다.
이 프로그램을 계속 써야 할 경우 어떻게 하면 좀 더 유연하게 만들어서 업그레이드 하는데 시간을 덜 들이는게 목적.
그러기 위하여 객체지향적으로 만들고 리팩토링을 해서 좀 더 코드를 유지보수를 쉽게 하는 것
'카테고리별 질문 정리' 카테고리의 다른 글
[데이터베이스] 질문 정리 (0) | 2022.03.09 |
---|
댓글