728x90
"자바"
- 상속(inheritance)이란?
상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말한다.
상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 한다.
다시 말해, 부모 클래스의 필드와 메소드를 자식 클래스에서 사용할수 있도록 합니다. - 다형성(polymorphism)이란?
사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질입니다.
예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 사용(장착)하느냐에 따라 주행 성능이 달라질 수 있습니다.
다형성을 구현하는 기술은 메소드 재정의와 타입 변환입니다. 자식 객체가 재정의된 메소드를 가지고 있을 경우, 부모 타입으로 자동 타입 변환 후에 메소드를 호출하면 재정의된 자식 메소드가 호출 되면서 다양한 실행결과를 가져올 수 있습니다.
- ".equals()" vs "=="
equals(): 객체끼리 내용(값)을 비교할 수 있는 "메소드" 입니다.
==: 객체의 참조(주소)값을 비교하는 "연산자"입니다. - 힙 영역 vs 스택 영역
힙 영역:
- new 연산자를 통한 동적 할당된 객체들이 저장, garbage 컬렉션에 의해 메모리가 관리되어진다.
- 메소드 호출이 끝나도 사라지지 않는다. (garbage 컬렉션이나 JVM이 종료되기 전까지)
스택 영역:
- 지역변수, 함수 등이 할당되는 LIFO 방식의 메모리
- 메소드가 호출될때 메모리가 할당되고 종료되면 메모리가 해제된다. - 인터페이스
자바에서 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 합니다. 쉽게 말해 Calc 라는 계산기 인터페이스가 있다고 가정할 때, 이 인터페이스의 내부 구조를 보면 add, substract, times, divide 라고 매개 변수와 함께 선언만 되어 있을 뿐, 소스 코드는 없습니다. 각각의 메소드는 클래스를 통해 따로 구현되며, 사용자는 소스 코드가 어떻게 되어 있는지 알 필요가 없습니다. 사용자는 이것을 보고 만약 덧셈 연산을 한다면 그냥 덧셈 연산을 위해서 add(1, 2) 이런 방식으로 사용하기만 하면 됩니다. 이것이 바로 인터페이스 입니다.
즉 다시 말하면, 인터페이스란 사용자가 객체의 내부 구조를 알지 못하더라도 사용할 수 있도록 객체의 사용 방법을 정의한 타입입니다. - 오버로딩(overloading) vs 오버라이딩(overriding)
오버로딩:
- 같은 이름의 메소드를 여러 개 정의하는 것.
- 매개변수의 타입이 다르거나 개수가 달라야한다.
오버라이딩:
- 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 것
"데이터 베이스"
- RDBMS란?
우선 RDB란 관계형 데이터 모델에 기초를 둔 데이터베이스입니다. 관계형 데이터 모델이란 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터 간의 상관관계에서 개체간의 관계를 2차원 테이블 형태로 표현해줍니다. 그리고 RDMS란 이러한 관계형 데이터베이스를 생성하고 수정, 삭제 관리할 수 있는 소프트웨어입니다.
- NOSQL이란?
RDBMS의 형태가 아닌 일관성 모델을 이용하는 데이터 저장을 말합니다. 관계형 데이터베이스의 한계를 극복하기 위한 데이터 저장의 새로운 형태로 수평적 확장성을 갖습니다.
장점
- RDBMS에 비해 저렴한 비용으로 분산 처리와 병렬 처리가 가능.
- json 구조로 RDBMS 테이블 구조에 비해 데이터를 직관적으로 파악.
- Big Data 처리에 효과적
- Scale out 구조를 채택하여 서버 확장에 용이하며, 더 많은 데이터를 저장
단점
- 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능.
- 많은 인덱스를 사용하려면 충분한 메모리가 필요. 인덱스 구조가 메모리에 저장.
- 복잡한 join은 어려움(다양하고 복잡한 데이터 쿼리), document based 이기 때문에
- 데이터의 일관성이 항상 보장되지 않음
728x90
댓글