본문 바로가기

전체 글

(133)
[Database] RDBMS vs NoSQL RDBMS RDBMS(Relational)는 데이터베이스를 이루는 객체들의 릴레이션을 통해서 데이터를 저장하는 데이터베이스입니다. SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요합니다. 장점: 명확한 데이터 구조를 보장하고, 중복을 피할 수 있습니다. 단점: 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있으며, 성능 향상을 위해서 서버의 성능을 향상 시켜야하는 Scale-up만을 지원합니다. 스키마로 인해 데이터가 유연하지 못합니다. NoSQL NoSQL(Not Only SQL)은 RDBMS에 비해 자유로운 형태로 데이터를 저장합니다. 데이터 테이블은 그냥 하나의 테이블이며 테이..
[Java] 객체지향이란 객체지향을 정의하면, 의존성 관리입니다. 객체지향으로 의존성을 관리함으로써 변경 영향을 최소화하고 독립적인 배포가 가능해지며 독립적인 개발이 가능해집니다. 따라서, 객체지향에서 가장 중요한 것은 DIP(Dependency Inversion Principle)를 통한 고수준 정책(High Level Policy)과 저수준 구현 세부사항(Low Level Details)의 분리라고 할 수 있습니다.
[Java] 접근 제어자의 종류 접근 제어자를 사용하는 이유는 외부에서 보여주고 싶은 정보들을 선택적으로 제공하기 위함이고, 캡슐화와 통하는 면이 있습니다. private: 해당 클래스 내에서만 접근 가능 default: 해당 패키지 내에서만 접근 가능 protectd: 상속한 클래스 내에서만 접근 가능 public: 전체 영역에서 접근 가능
[Java] 정적(static)이란 무엇인가요? static은 클래스 멤버라고 하며, 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리됩니다. static 키워드를 통해 생성된 정적 멤버들은 PemGen 또는 Metaspace에 저장되며 저장된 메모리는 모든 객체가 공유하며 하나의 멤버를 어디서든지 참조할 수 있는 장점이 있습니다. 그러나, GC(Garbage Collector)의 관리 영역 밖에 존재하기 때문에 프로그램 종료 시까지 메모리가 할당된 채로 존재합니다. 너무 남발하게 되면 시스템 성능에 악영향을 줄 수 있습니다.
[Java] 클래스는 무엇이고 객체는 무엇인가요? 클래스는 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다. 객체는 식별 가능한 개체 또는 사물입니다. 객체의 상태(속성, 특성)을 멤버 변수, 객체의 행동(기능)을 메소드 혹은 멤버 함수라고 표현합니다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가집니다. 인스턴스(클래스가 메모리에 생성된 상태) 들을 통칭하는 용도로 사용합니다.
[Java] 인터페이스와 추상 클래스의 차이점 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용합니다. 다중 상속이 가능하고, 인터페이스를 구현하는 집합간에는 관계가 없을 수 있습니다. 인터페이스는 다른 클래스를 작성하는데 도움을 주는 목적으로 기본 설계도라고 표현합니다. public static final의 사용 목적은 인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기 때문에 스스로 초기화 될 권한이 없습니다. 때문에 public static final을 사용해 구현 객체의 같은 상태를 보장합니다. interface 인터페이스 이름 { public static final 상수이름 = 값; public abstract void 메서드 이름(); } 추상 클래스는 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용합..
[Java] 오버라이딩과 오버로딩이 무엇이며 어떤 차이가 있을까요? 오바라이딩(Overriding)은 상위 클래스의 메소드를 재정의 하는 것을 의미합니다. 또한, 런타임 다형성이기도 합니다. 오버로딩(Overloading)은 같은 클래스 내에서 동일한 메소드 이름을 가지지만, 매개 변수의 타입, 개수를 다르게 구현할 수 있는 것을 의미합니다. 또한, 컴파일 타임 다형성이기도 합니다. 따라서, 오버라이딩이 될 수 있습니다. 추가로 '@Override'를 써야하는 이유를 꼭 생각해보세요. 이 어노테이션은 컴파일 타임에 오버라이딩에 대한 안정성을 부여해주기 때문에 반드시 써주는 것이 좋습니다.
[Java] 제네릭이란 제네릭은 자바의 타입 안정성을 맡고 있습니다. 컴파일 과정에서 객체의 타입을 체크를 하기 때문에, 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다. 제네릭 선언은 클래스 제네릭 타입으로는 참조형 데이터 타입(배열, 열거 타입, 클래스, 인터페이스)만 설정 가능합니다. (* 레퍼클래스: Boolean, Character, Byte, Short, Integer, Long, Float, Double) 래퍼 클래스는 기본형 데이터 타입을 참조형 데이터 타입으로 바꿔주는 클래스입니다.