Day 8

이한주·2023년 3월 2일
0

오버로딩과 오버라이딩의 차이점은 무엇인가요?

=> 오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

오버로딩을 사용하는 이유
1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.
2. 다형성
3. 사용자 편의성

=> 오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것이다.
상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.
오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.

오버라이딩 조건
1. 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.
2. 예외(Exception)는 부모 클래스의 메소드 보다 많이 선언할 수 없다.
3. static메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다.

RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요.

=> 관계형 데이터베이스로 풀이되는 RDB는 말 그대로 관계형 모델을 기반으로 하는 데이터베이스이다.
RDBMS는 주로 SQL(Structured Query Lang)을 이용해 데이터를 조회하고, 관리하게 된다.

특징은 다음과 같다.

  1. 스키마 변경이 어렵다.
    RDB는 매우 정교한 초기 설계로 만들어진다. 테이블 사이에 서로 의존성이 있고, 쳇바퀴처럼 맞물려 돌기 때문에 데이터 타입을 바꾼다든지 새로운 열을 추가한다든지 하는 작업은 힘들다.

  2. 스케일링
    RDB가 수직 확장이 더 용이하고 수평 확장이 어려운 이유는, 데이터가 여러 테이블에 의존해있기 때문이다.

  3. 트랜잭션과 ACID

관계형 모델

관계형 모델은 실제 세계의 데이터를 관계라는 개념을 사용해서 표현한 데이터 모델이다

Relation

Relation은 Heading과 Body로 구성돼 있다.
Heading은 Attribute가 n개 모인 집합이며, 이 Attribute는 이름과 데이터 형으로 되어 있다.
Body는 속성값의 집합인 tuple의 집합이다.
튜플과 속성은 SQL에서는 row, column이라고 한다.

=> NOSQL 데이터베이스는 관계형이 아닌 데이터 모델을 총칭하고, 도큐먼트 모델 / 키-값 모델 / 그래프 모델 / 와이드 컬럼 모델 등 다양한 데이터 모델이 있다.

특징은 다음과 같다.
1. 다양한 방식으로 데이터를 표현한다
2. 테이블(혹은 컬렉션 혹은 또 다른 명칭) 사이에 딱히 명시된 제약이나 규칙이 없다
3. 스키마가 고정적이지 않고, 매우 유연하다
4. Horizontal Scale이 쉽다
5. 코스트 저렴 / 오픈소스도 많다
6. 연산이 빠르고 빅데이터 & 실시간 연산에 적합하다

NoSQL 다양한 방식

  1. 도큐먼트 모델은 레코드 하나를 오브젝트(도큐먼트) 형식으로 표현한다. 자유로운 스키마 구조를 가지며 구조가 확정되지 않은 데이터를 밀어넣고, 자유롭게 작업하기 좋다. 몽고DB나 아랑고DB가 대표적인 예시이다.

  2. 그래프 모델은 데이터를 버텍스와 엣지로 그래프에 표현하는 방식이다. 데이터 사이의 유기적인 관계를 표현하기에 적합하다. 대표적인 예로 Neo4j와 ArangoDB, Gremlin 등이 있다. 아랑고DB에 대해서는 현재 블로그에서 다루고 있으니 궁금하면 여기

  3. 키/값 모델은 하나의 키에 값을 맵핑하는 해시 구조의 데이터 모델이다. 빠르게 데이터에 접근할 수 있는 장점이 있다. 대표적인 예로 redis가 있음

  4. 와이드 컬럼 모델은 테이블 형태를 취하지만 행마다 갖는 컬럼의 형태가 고정되어 있지 않은 데이터 모델이다. 언뜻 와닿지 않는 내용인데, 이 글을 참고하길 바란다.

RDB vs NoSQL

  • RDB는 관계형으로 데이터를 저장하지만, NoSQL은 그렇지 않다.
  • RDB는 스키마가 정적이지만, NoSQL은 유연한 스키마 구조를 갖는다.
  • RDB는 수직 확장이 용이하고, NoSQL은 수평 확장이 용이하다. (즉, - RDB는 서버 용량을 늘리는 게 쉽고, NoSQL은 서버를 여러 대 늘리는 게 쉽다)
  • 위와 관련해서, RDB는 확장 시 다운타임이 있을 수 있지만, NoSQL은 거의 없다.
  • RDB는 복잡한 쿼리와 Join 연산이 가능하다. NoSQL은 구조화된 쿼리 언어가 없는 경우도 많고, 일반적으로 Join이 없다.
  • RDB는 OLTP에 적합하고, NoSQL은 OLAP에 적합하다. (즉, RDB는 트랜잭션 처리에 용이하고, NoSQL은 분석 처리에 용이하다)

0개의 댓글