하나의 릴레이션에 관련없는 속성이 들어가지 않게 하기위해서 속성들의 친밀도를 정확히 판단하고, 이 기준에 따라 릴레이션을 구성하는 방법을 정규화라고 한다. 또는 데이베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때, 부작용이 발생할 수 있는데 이러 한 부작용을 이상현상이라고 하고, 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화이다. 이상 현상의 종류 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 갱신 이상: 중복 tuple 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제 삭제 이상: tuple을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제 정규화의..
논리적 데이터 모델의 개념과 특성 선택한 DBMS에 따라 사용자 입장에서 E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 저장할 형태로 표현한 논리적인 구조를 논리적 데이터 모델이라고 한다. 즉, 논리적 데이터 모델은 논리적 데이터 모델링의 결과물이고, 사용자가 생각하는 데이터베이스의 모습 도는 구조이다. 그리고 논리적 데이터 모델로 표현된 데이터베이스의 논리적 구조가 바로 데이터베이스 스키마이다. 데이터베이스에 있는 데이터 간의 관계를 표현하는 방법에 따라 다양한 논리적 데이터 모델이 존재한다. 일반적으로 누구나 쉽게 이해할 수 있는 데이터 구조를 가지고, 데이터의 검색, 삽입, 삭제, 수정 등의 연산을 제공하는 논리적 데이터 모델이 관계 데이터 모델이다. 데이터베이스 설계 개념 관계 데이터 ..
릴레이션에 포함된 tuple들을 유일한게 구별해주는 역할은 속성 또는 속성들의 집합인 키가 담당한다. 키는 관계 데이터 모델에서 중요한 제약조건을 정의한다. 1. 슈퍼키 슈퍼키는 유일성의 특성을 만족하는 속성 또는 속성들의 집합이다. 유일성은 키가 갖추어야 하는 기본 특성으로, 하나의 릴레이션에서 키로 지정된 속성 값은 tuple마다 달라야 하다는 의미이다. 하지만 (고객아이디, 고객이름)과 같이 슈퍼키 중에는 tuple 하나를 유일하게 구별하기 위해서 또는 2개의 tuple이 서로 다름을 판단하기 위해 불필요한 속성 값까지 확인하는 비효율적인 작업이 필요한 경우도 있다. 이때, 꼭 필요한 속성의 집합만으로 tuple을 유일하게 구별할 수 있도록 하는 또 다른 키의 개념이 필요한데, 이 것이 후보키이다...
✏️ 개요 전략 패턴은 변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 즉, 상속이 아니라 위임으로 문제를 해결하는 것이다. 전략 패턴에서 Context는 변하지 않는 템플릿 역할을 하고, Strategy는 변하는 알고리즘 역할을 한다. GOF 디자인 패턴에서 정의한 전략 패턴의 의도는 다음과 같다. '알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환이 가능하게 만든다. 전략 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다.' ❓ 사용법 Context public class ContextV1 { private Strategy strategy; public ..
✏️ 개요 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿 코드를 둔다. 그리고 변하는 부분은 자식 클래스에 두고 상속과 오버라이딩을 사용해서 처리한다. 💻 자바에 적용 템플릿 public abstract class AbstractTemplate { public void execute() { long startTime = System.currentTimeMillis(); // 비즈니스 로직 실행 call(); // 상속 // 비즈니스 로직 종료 long endTime = System.currentTimeMillis(); long resultTime = endTime - startTime; log.info("resultTime = {}", resultTime); } protected abstract..
❓OOP란 우리가 보고 인지하는 실제 세계를 흉내내어 가장 기본적인 단위인 객체들을 만들고, 그것들 간의 유기적인 상호 작용을 규정하여 프로그램을 발전시키는 프로그래밍 방법론 1. 추상화 객체의 공통적인 속성(변수)와 기능(메서드)를 추출하여 정의하는 것 자바에서 추상화를 구현할 수 있는 문법 요소로는 추상 클래스와 인터페이스가 있다. 객체 지향적 설계에 있어서 인터페이스는 어떤 객체의 역할만을 정의하여 객체들간의 관계를 보다 유연하게 연결하는 역할을 담당한다. 인터페이스에는 추상 메서드나 상수를 통해서 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정해두고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하도록 프로그램을 설계하는 것이다. 역할과 구현의 분리 객체 지향 프로그램에서는 ..
✏️ 개요 SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙을 말한다. 해당 용어의 개념 이론들은 oop의 4가지 특징(추상화, 상속, 다형성, 캡슐화) 등의 개념들을 재정립한 것이다. 또한 5가지 원칙들은 서로 개념적으로 연관되어 있다. SRP : 단일 책임 원칙 (single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion priciple) ❓ 좋은 설계란 무..
✏️ 개요 인터페이스 사용하는 클래스가 사용되는 클래스의 종류와 상관없는 독립적인 클래스가 된다. 인터페이스의 메서드는 반드시 구현해야 하는 강제성을 갖는다. 추상클래스 인터페이스의 역할도 하면서 클래스의 기능도 가지고 있는 자바의 돌연변이 같은 클래스이다. 다형성 객체가 한 개 이상의 자료형의 타입을 갖게되는 특성을 의미한다. 부모 자식 상속 관계에 있으면 부모 타입으로 자식 클래스 타입을 받아 초기화할 수 있다. 자바에선 대표적으로 Overloading, Overriding, UpCasting, DownCasting, Interface, 추상메서드, 추상클래스 방법이 모두 다형성에 속한다. 🔎 자료형 다형성 다형성의 핵심은 '타입 묶음'이다. 공통적인 상속 클래스의 특징을 이용해 각 자료형의 타입을 ..
✏️ 개요 동시성 문제 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제를 동시성 문제라고 한다. 스프링 빈처럼 싱글톤 객체의 필드를 변경하여 사용할 때, 이러한 동시성 문제를 조심해야 한다. 동시성 문제는 지역 변수에서는 발생하지 않는다. 지역 변수는 쓰레드마다 각기 다른 메모리 영역이 할당된다. 동시성 문제가 발생하는 곳은 같은 인스턴스의 필드, 또는 static 같은 공용필드에 접근할 때 발생한다. ThreadLocal 해당 쓰레드만 접근할 수 있는 특별한 저장소를 말한다. 즉, 각 쓰레드마다 별도의 내부 저장소를 제공한다. 자바는 언어차원에서 쓰레드 로컬을 지원하기 위한 java.lang.ThreadLocal 클래스를 지원한다. 📌 사용법 값 저장: ThreadLocal.s..