일기

2023-02-28

SHsus 2023. 2. 28. 14:57

면접 스터디를 시작하고 매주 받는 과제들로부터 조사한 내용들의 정리

 

 

 

 

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

둘 모두 객체지향에서 다형성을 구현하는 방법 입니다.

 

 

오버로딩 Overloading

메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미합니다.

리턴 값만을 다르게 갖는 오버로딩은 작성 할 수 없습니다.

 

오버로딩 예제

public class BMW extends Car {
    String brand = "BMW";
    String carName;

    public BMW(String brand) {
        this.brand = brand;
    }

    public BMW(String brand, String carName) {
        this.brand = brand;
        this.carName = carName;
    }

    public BMW(String ownerName, int carNum) {
        this.ownerName = ownerName;
        this.carNum = carNum;
    }
}

 

오버로딩 예제위의 코드를 보면 모두 같은 이름의 생성자로 되어있는 것을 볼 수 있습니다.

이를 통해 메소드의 이름을 일관성 있게 유지할 수 있으며 사용성을 개선할 수 있습니다.

그런데 매개변수는 모두가 다 다릅니다.

이를 통해 원래 자바에서는 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없도록 되어있지만 오버로딩은 이를 가능캐 해줍니다.

 

 

오버라이딩 Overriding

상위 클래스의 메서드를 하위 클래스가 재정의 하는 것을 의미합니다.

메서드의 이름, 파라미터 갯수 및 타입 모두 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 재정의 해서 사용합니다.

 

오버라이딩 예제

public class BMW extends Car {
    String brand = "BMW";

    BMW(String ownerName, int carNum) {
        this.ownerName = ownerName;
        this.carNum = carNum;
    }

    // 메서드 오버라이딩
    @Override
    public void target() {
        System.out.println("BMW 사의 주 고객층은 30~50 세대 입니다.");
    }
}
public class BENZ extends Car {
    String brand = "BENZ";

    BENZ(String ownerName, int carNum) {
        this.ownerName = ownerName;
        this.carNum = carNum;
    }

    @Override
    public void target() {
        System.out.println("BENZ 사의 주 고객층은 40~60 세대 입니다.");
    }
}
public class CarExam {
    public static void main(String[] args) {
				BMW car1 = new BMW("철수", 1111);
        BENZ car2 = new BENZ("영희", 2222);

        car1.introduce();
        car1.target();

        car2.introduce();
        car2.target();
		}
}

 

이를 통해서 코드의 중복을 방지하며 유연성을 높일 수 있습니다.

 

이는 부모 클래스를 상속 받아서 target() 메소드를 재정의 한 결과입니다. 이것을 오버라이딩 이라고 합니다.

 

위의 코드처럼 원래 target 메서드의 결과값은 “BMW 사의 주 고객층은 30~50 세대 입니다.” 이라는 출력문이 나와야 하는데 위의 결과값을 보면 그렇지 않습니다.

 

메소드 이름 동일 동일
매개변수 타입 다름 동일
리턴 타입 상관없음 동일

즉, 오버로딩은 기존에 없던 새로운 메서드를 정의하는 것이고,

오버라이딩은 상속 받은 메서드의 내용만을 변경하는 것을 말합니다.

 

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

우선은 아래의 이미지로 간단하게 정리하고 시작…

 

 

RDB (Relational Database)

관계형 데이터 모델을 바탕으로 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스 입니다.

구성된 테이블이 아닌 다른 테이블들과 관계를 맺고 모여있는 집합체 입니다.

이러한 관계를 나타내기 위해 외래 키(Froeign Key) 를 사용하며, 테이블간의 관계에서 외래키를 이용해 테이블간 Join 하는 것이 가장 큰 특징입니다.

 

조금 더 자세히...

  • 데이터의 중복을 허용하지 않기 때문에 객체안에 객체를 넣을 수 없기 때문에 두 개의 테이블의 데이터를 Join 을 통해 사용합니다.
  • 시스템이 커지면 join문이 복잡해지고 성능 향상을 위해서는 스케일 업만 가능해 비용이 크게 발생합니다.
  • 데이터가 중복되지 않도록 해 테이블의 역할을 명확하게 구분하고 테이블 간에는 외래키를 사용해서 데이터를 공유하는 것으로 서로 관계를 맺도록 설계한 데이터 모델입니다.

장점

  • 정해진 스키마가 존재하기에 명확한 데이터 구조를 보장합니다.
  • 각 데이터별로 중복 없이 한 번만 저장이 가능합니다.

단점

  • 테이블간 관계를 맺고 있어 시스템이 커질 경우 Join 문이 많아져 쿼리가 복잡해집니다.
  • 성능 향상을 위해서 스케일업 만을 지원하기 때문에 발생하는 비용이 큽니다.

 

NoSQL (Not only SQL)

SQL 을 사용하지 않는 데이터베이스 관리 시스템을 말합니다.

즉, 비관계형 데이터베이스 입니다. 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다.

데이터 분산이 용이하며 성능 향상을 위한 스케일 아웃도 제공합니다.

 

조금 더 자세히

  • 데이터의 중복이 가능해 객체 안에 객체를 넣을 수 있습니다. 그래서 컬렉션과 컬렉션 간에 관계가 존재하지 않습니다.이를 커버 하는 기술이 바로 샤딩으로 대표적으로 MongoDB 에서 이를 제공하고 있습니다.
  • 이로 인해 데이터 조회시 매우 빠릅니다. 다만, 데이터의 중복으로 인해 각각의 컬렉션의 데이터를 동기화에서는 느린 편입니다.
  • Table 형식이 아닌 비정형 데이터를 저장할 수 있도록 지원합니다. 저장 형식은 key-value 형식으로 저장됩니다. key 를 통해 value 에 접근하며 value는 어떠한 형태의 데이터라도 담을 수 있습니다. (언제든지 라는 말은 스키마 같이 정해진 규약이 없기 때문에 언제든지 쉽게 가능하다는 의미)

장점

  • 스키마가 없기에 유연하며 자유로운 데이터 구조를 가질 수 있습니다.
    • 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있습니다.
    • value 의 형태에 제약이 없기 때문에 각기 다른 이름과 다른 데이터 타입을 가질 수 있습니다.
  • 샤딩 기술을 통해 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 발생했을 때 데이터 유실 혹은 서비스 중지를 예방 가능합니다.
  • RDB 와는 달리 스케일업 뿐만 아니라 스케일 아웃도 제공합니다.

단점

  • 데이터 중복을 허용하기 때문에 중복된 데이터 변경시 해당 수정을 모든 컬렉션에서 수행해야하 합니다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않습니다. 이로 인해 데이터 구조 결정하기에 다소 어려움이 있습니다.

 

외래키와 join 을 이용해 여러 테이블간 관계를 구축해놓은 데이터베이스를 말합니다.

SQL 을 사용하지 않으며 key-value 형태로 구축한 데이터베이스를 말합니다.

RDB 는 정해진 Schema 로 인해 데이터 중복이 없기 때문에 Update 가 잦은 경우에 좋습니다. 다만, 시스템이 커지면 join 문 또한 많아지고 쿼리가 복잡해지는 단점이 있습니다.

key-value 형태여서 조회속도에 유리하며 value 에는 어떠한 형태의 데이터든 저장이 가능해 데이터 구조가 굉장히 자유롭습니다.

하지만, 중복을 허용하기 때문에 update 시 모든 컬렉션에서 수정이 필요하며, 데이터 구조가 명확하지 않다는 단점이 있습니다.

 

  • 다른 분 정리 내용
    장점으로는 데이터의 일관성과 무결성을 보장할 수 있으며, 대규모의 데이터 처리에도 효율적입니다. 단점으로는 스키마 변경이 어렵고, 확장성이 제한적입니다.장점으로는 확장성이 높으며, 스키마 변경이 자유롭습니다.
    대용량의 비정형 데이터를 처리하기에 적합합니다. 단점으로는 데이터의 일관성을 보장하기 어려우며, 적은 데이터 양에서는 RDB보다 성능이 떨어질 수 있습니다.
  • NoSQL은 스키마가 없거나 유연한 스키마를 사용하여 데이터를 저장합니다. 각 문서(document)는 키(key)와 값(value) 쌍으로 이루어집니다. 관계를 가질 수 없기 때문에 JOIN 연산이 불가능합니다. 대신, 데이터의 중복을 허용하여 복수의 쿼리를 줄일 수 있습니다.
  • RDB는 테이블 형태로 데이터를 저장하며, 각 테이블은 행(row)과 열(column)로 구성됩니다. 테이블 간에 관계를 가질 수 있으며, 이를 통해 데이터의 일관성을 유지할 수 있습니다.