📌오버로딩과 오버라이딩의 차이점은 무엇인가요?
- Overload는 같은 이름 메소드를 여러 개 정의하는 것을 뜻하는데 인자의 타입, 개수 등을 다르게 하여 다양한 타입의 호출에 응답할 수 있도록 하는 방식입니다. 하나의 메소드 명으로 여러 기능과 연산들을 구현하기 위해 사용되며, 하나의 클래스 또는 상속 관계의 클래스 관계에서 정의할 수 있습니다.
- Override는 메소드의 내용을 덮어 씌우는 재정의를 뜻합니다. 이는 상속 관계에서만 가능하기 때문에 상위 클래스에서 정의된 메소드를 하위 클래스에서 좀 더 구체화하는 등 자신에 맞게 변경하여 재정의합니다. 메소드 명 뿐만 아니라 인자의 타입, 개수, 리턴 타입 등이 모두 동일해야 하는 조건이 있습니다.
📍오버로딩과 오버라이딩은 객체지향에서 다형성 활용한 대표적인 예인데 다형성에 대해 설명해주세요
다형성이란 하나의 타입에 여러 객체르 대입할 수 있는 성질
다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 주입만으로 수정이 일어나게 할 수 있다. 또한 상속을 한다면 중복되는 코드까지 제거할 수 있다.
다형성을 구현하는 방법
📍SOLID 원칙에서 다형성을 기본으로 하는 원칙이 무엇일까?
OCP(Open-Closed Principle / 개방폐쇄원칙), DIP (Dependency Inversion Principle / 의존 역전 원칙)
📍오버로딩 , 오버라이딩 사례 찾아보기
📌 RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요.
RDB
- 관계형 데이터 모델에 기초를 둔 데이터베이스
- 2차원 데이터로 표현된다 (행/열)
- 상호관련성을 가진 테이블의 집합으로 구성된다
장점 :
- 스키마가 명확하게 정의되어 있다.
- 오래 사용된 만큼 신뢰성이 높고, 데이터의 무결성을 보장한다.
- 유지보수가 편하다.
단점 :
- 먼저 작성된 스키마를 수정하기 어렵다.
- 시스템이 커지면 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
- Vertical scalability(수직 확장성)는 좋지만, Horizontal scalability(수평 확장성)이 낮다.
- 다른 DB에 비해 많은 자원이 활용되어 시스템 부하가 높다.
확장성이란
- 수직 확장성 : = 스케일 업(scale-up) cpu 갯수나 cpu 코어를 늘려 처리량을 증가시키거나 메모리, 저장 용량을 추가해 단일 인스턴스 성능을 업그레이드 하는 방법
- 수평 확장성 : = 스케일 아웃(scale-out) 단일 인스턴스 성능을 더 강력하게 만드는 방법이라기 보다 같은 타입의 인스턴스를 여러 개 시작해 시스템을 수평적으로 확장하는 방법
- 오류 가능성(하나만 운영), 서버 소프트웨어 설계 비용, 단위 처리 속도의 세 가지 측면에서 보자면 수직 확장이 더 좋고. 확장 비용, 처리 가능 총량의 두 가지 측면에서 보자면 수평 확장이 더 좋다.
NoSQL (Not only SQL)
- 다양한 방식으로 데이터를 표현한다. Join이 없고 애플리케이션이 요구하는 형식으로 저장이 가능하기 때문에 읽어오는 속도가 빠르다.
- 연산이 빠르고 빅데이터 & 실시간 연산에 적합하다
- RDB가 정해진 스키마에 따르지 않으면 데이터 추가가 불가능 하지만 NoSQL 같은 경우 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.
- 테이블(혹은 컬렉션 혹은 또 다른 명칭) 사이에 딱히 명시된 제약이나 규칙이 없다
- 스키마가 고정적이지 않고, 매우 유연하다
- Horizontal scalability(수평 확장성)이 좋다
- 코스트 저렴 / 오픈소스도 많다
종류: MongoDB(json document 형태로 저장) Redis(key-value방식 읽고 쓰기가 빠름) Tao (GraphDB 각각의 entity를 저장하고 관계망으로 연결. 소셜 네트워크에 특화)
📍RDB를 써야하는 경우
📍NoSQL을 써야하는 경우
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
- 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
📍스키마가 뭔가요?
데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의
사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다.
📍스키마 3계층
* 외부스키마
사용자나 응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것
동일한 데이터에 대해 서로 다른 관점을 정의할 수 있도록 허용
* 개념 스키마
각 DB에는 1개의 개념 스키마만 존재
개체 간의 관계 및 무결성 제약 조건, 데이터베이스의 접근 권한 등에 대한 명세를 정의
데이터베이스 관리자(DBA)에 의해서 구성
* 내부 스키마
물리적 저장장치의 관점에서 본 DB 구조
실제로 저장될 데이터 항목의 내부 레코드 형식, 물리적 순서 등을 나타낸다.
시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마
📍ACID 성질에 대해 말씀해 주세요
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질
- 원자성(Atomicity)은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다
- 일관성(Consistency)은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다
- 고립성(Isolation)은 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다
- 지속성(Durability)은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다
📍ACID 모델 말고 NoSQL에 적용된 BASE 모델에 대해서 설명해주세요
ACID가 데이터베이스 트랜잭션이 안전하게 수행된다는 걸 보장하기 위한 성질 이라면
BASE는 가용성과 성능을 중시하는 특성을 말한다
BAsically available (기본적인 가용성) :
- 가용성을 중시, Optimistic Locking 및 큐 사용
- 다수의 실패에도 가용성을 보장, 다수의 스토리지에 복사본 저장
Soft state
- 노드의 상태는 외부에서 전송된 정보를 통해 결정됨 - 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신 |
Eventually Consistent (최종 일관성) : 일시적으로 비일관적인 상태가 되어도 최적으로는 일관성이 있는 상태가 되는 성질
📍 No SQL에도 트랜잭션 갖고 있는애들 있어
'Memo' 카테고리의 다른 글
면접대비 - 프로그래밍, 시간복잡도 vs 공간복잡도 (0) | 2023.03.01 |
---|---|
면접대비 - WS vs WAS, Stack vs Queue, Array vs Linked List (0) | 2023.02.28 |
면접대비 - Spring Test차이, 트랜잭션, TCP vs UDP (0) | 2023.02.27 |
면접 대비 - parameter vs argument, 프로세스 vs 스레드 (0) | 2023.02.24 |
면접 대비 - MSA & 제네릭 & List, Set, Map, HashMap의 차이 (0) | 2023.02.23 |