본문 바로가기
카테고리별 질문 정리

한, 두줄 정리

by 문자메일 2022. 8. 1.

객체지향

객체

객체는 현실 세계를 모델링한 개념이고, 객체 내에는 명사형의 상태와 동사형의 메서드가 존재한다.

 -> 물리적인 특성

위와 같은 말로 객체는 데이터와 그 데이터를 조작하는 프로시저로 구성된다.

실제로 객체를 정의할 때 사용되는 것은 객체가 제공해야 할 기능이며, 객체가 내부적으로 어떤 데이터를 갖고 있는 지로는 정의되지 않는다.

-> 객체의 핵심은 기능을 제공하는 것

 

객체지향 패러다임

  • 적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것
  • 점점 증가하는 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

 

트렌젝션

https://zzang9ha.tistory.com/381 [MySQL] - 트랜잭션의 격리 수준(Isolation level) 📎 글또 6기 포스팅 1. 미치도록 더웠던 7월의 회고 2. 사용자가 게시물을 작성할 때의 트랜잭션 처리 3. Spring AOP - (1..

charactermail.tistory.com

 

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

댓글