CS 19

[CS] 데이터베이스 - 키

키에 대해서 알기 전에 두 가지를 알 필요가 있다. 유일성 : 다른 튜플에 중복되는 값이 없는 성질(유일성을 갖춘 것들을 슈퍼키라고 부른다.) 최소성 : 다른 속성과 묶여 판단되는 것이 아닌, 단순 속성 자체로 판단될 수 있는 성질, 그리고 최대한 단순한 상태 이를 종합해 유일성과 최소성을 갖춰야 기본키가 될 수 있다고 한다. 유일성 + 최소성 = 속성 하나로 이루어진 데이터이며 다른 튜플과 중복되지 않는 값인 상태 를 갖춰야 기본키로 쓸 수 있다. 그러면 기본키는 뭘까? 유일성과 최소성을 만족시킨다. null값을 허용하지 않으며 중복되지 않아야 한다(유일성) 기본키는 자연키, 인조키중에 더 단순하게 생긴 것을 사용한다(최소성) 이런 키를 기본키라고 한다. 이런 녀석을 찾기 위해 우리는 후보키 라는 것을..

[CS] 데이터베이스 - 속성의 타입

숫자 타입 TINYINT SMALLINT MEDIUMINT INT BIGINT 용량 1Byte 2Byte 3Byte 4Byte 8Byte 값의 범위(부호 있음) -128~127 -128~127 -32768~32767 -8388608~ 8388607 -2147483648~ 2147483647 값의 범위(부호 없음) 0~255 0~255 0~65535 0~16777215 0~4294967295 문자 타입 CHAR 괄호를 쳐서 저장가능한 길이를 정할 수 있다. 0~255의 고정길이를 저장하게 된다. VARCHAR 괄호를 통해 0~65535의 길이를 정할 수 있다. 입력 길이만큼의 바이트 + 길이 저장용 1바이트의 공간을 가진다. 가변길이로 저장된다. TEXT 큰 문자열(게시물의 내용, 메일)에 쓰인다. BLO..

[CS] 데이터베이스 - 기본 구조

데이터베이스의 구조 엔티티 여러 개의 속성을 가진 객체. 필요한 속성들로 객체를 만들게 된다. 필요없는 속성이 테이블에 존재한다면 그 속성은 엔티티에 속하지 않게 된다. 약함과 강함 엔티티 A와 B가 있을 때, B가 A없이 존재할 수 없다면, B는 약한 엔티티이다. 예시) 게시물과 댓글 릴레이션 속성들을 표현하는 릴레이션 스키마, 스키마의 속성들을 가지는 릴레이션 인스턴스를 의미하는 튜플이 존재한다. 이들을 모아서 릴레이션이라고 한다. MySQL은 테이블, NoSQL은 컬렉션이라고 명명한다. 튜플 속성에 따른 각 행을 의미한다. 파일구조에서 레코드와 같은 의미를 가진다. 릴레이션 인스턴스(튜플)의 길이를 카디널리티라고 한다. 속성 릴레이션 스키마를 구성하는 열 속성에는 넣을 수 있는 값들이 정해져 있다...

[CS] 자료구조 2. 연결리스트

연결리스트 연결리스트의 구조는 빼빼로처럼 생겼다고 생각하면 받아들이기 쉬웠다. 먹고 싶은 부위인 초콜릿엔 필요한 값을 넣고, 그냥 과자 부분엔 포인터를 넣는다. 이 포인터에는 다음 값이 어디 저장되어있는지 주소를 저장한다. 하나의 빼빼로를 노드라고 부른다. 추가 연결리스트에서 노드를 집어넣기 위해서는 2가지 일만 해주면 된다. 이전 노드의 포인터를 집어넣으려는 노드의 주소로 지정한다. 다음 노드의 주소를 집어넣으려는 노드의 포인터로 지정한다. 확실히 배열과는 다른 차이가 있다. 시간이 길이에 상관되지 않는 상수값이기 때문에, O(1)의 시간 복잡도를 가진다고 한다. 조회 조회가 연결리스트의 단점이다. 5개의 노드가 연결된 리스트가 있다고 생각했을 때 원하는 값을 찾기 위해서는 모든 노드를 포인터의 지시에..

CS/자료구조 2023.06.06

[CS] 자료구조 1. 배열

선형 자료구조란? 선형 자료구조는 데이터가 저장되고 만들어지는 구조가 일직선상으로 존재하기에 붙은 이름이다. 크게 배열, 벡터, 리스트, 스택, 큐 정도를 다뤄보려고 한다. 배열 배열은 인덱스를 가지고 각 인덱스마다 값을 하나씩 저장하는 구조이다. 같은 타입의 변수를 가지고, 크기가 정해져 있으며, 데이터를 인접한 메모리 위치에 저장한다. 중복을 허용하며 순서(인덱스)를 가진다. 특징으로는 랜덤 접근이 가능하다. 즉, 랜덤으로 인덱스를 주었을 때 이를 바로 찾아올 수 있다는 뜻이다. (이렇게 말하는 것은 이러지 못하는 녀석이 있다는 뜻!) 추가 위에서 배열의 크기가 정해져 있다고 했다. 그러면 데이터를 추가할 때에는 어떻게 해야할까? 새로운 배열을 만들고, 내가 집어넣으려는 인덱스 이전까지의 배열을 복제..

CS/자료구조 2023.06.05

[CS] 디자인 패턴 - 옵저버 ( 야 야 너 뭐하냐? )

이 게임을 해본 사람은 알 것이다. 옵저버가 있으면 상대 플레이어를 실시간으로 볼 수 있다. 이를 통해, 우리는 상대방의 행동이나 전략에 따라 유동적으로 반응할 수 있다. 이게 디자인 패턴으로 존재할 때, 어떤 느낌인지 보자. Source Code : https://github.com/JangAJang/cs/tree/main/src/design/observer 옵저버 패턴이란? 계속해서 변하는 객체가 있다고 해보자. 옵저버들이 해당 객체에 연결되어, 객체의 변경을 감지에, 이에 따른 결과를 가져오게 한다. 예시를 생각하자면, 채팅 기능을 생각해보면 될 것 같다. 채팅방이라는 객체와 채팅방에 참여하는 사용자(옵저버)들이 존재할 때, 채팅방에 누군가 글을 올리면, 모든 사람들이 이에 대한 변경을 감지해 글을..

CS 2023.05.09

[CS] 디자인 패턴 - 전략 패턴

싱글톤과 팩토리 패턴의 디자인은 만들면서 새롭다는 느낌, 활용하기 좋다는 느낌을 받았다. '객체지향의 사실과 오해' 책을 보면서 이를 팩토리 패턴과 함께 활용하면 좋겠다, 싱글톤 패턴의 아쉬운 부분들이 무엇일까를 고민하게 해주었다. 하지만, 이와 반대로 전략 패턴은 오히려 객체지향의 사실과 오해에서 공부했던 부분들을 하나의 패턴으로써 정의했다고 생각한다. 전략패턴이라는 것이 무엇일까? 소스코드 : https://github.com/JangAJang/cs/tree/main/src/design/strategy 전략패턴이란? 전략패턴을 이해하는 과정에서 객체지향의 사실과 오해 3장에서 배웠던 추상화를 생각나게 한다. 객체들의 역할은 대체될 수 있다는 문구가 있었다. A라는 역할을 수행하는 a객체가 있는데, b..

CS 2023.04.30

[CS] 디자인 패턴 - 팩토리

싱글톤 패턴에서는 모든 객체가 지연 초기화되거나, Holder로 즉시초기화 시켜 있는 객체를 불러와 사용하는 방식이다. 소스 코드 : https://github.com/JangAJang/cs/tree/main/src/design/factory 팩토리 패턴이란? 팩토리 패턴은 말 그대로 '공장' 이다. 공장에서 상품을 만들기 위해서 어떻게 할까? 발주를 받는다. 발주 받은 주문서를 보고 이에 따라 상품을 만든다. 상품을 준다. 의 방식으로 동작하게 된다. 이것과 비슷할까? 팩토리 패턴은 어떨까? Factory에 메서드(어쩌면 static 메서드)로 객체 생성을 요청한다. 파라미터로 요청사항을 받는다. 요청사항에 맞게 객체를 생성한다. 객체를 반환한다. 이런 식으로 처리하게 된다. 여기에서 몇가지 주의해야 ..

CS 2023.04.21

[CS] 디자인 패턴 - 싱글톤

싱글톤이란 무엇일까? 싱글톤 패턴이란, 오직 하나의 객체만을 생성할 수 있는 클래스를 말한다. 언제든 객체의 유일성을 보장할 수 있으며, public static 객체클래스 getInstance() 로 해당 객체를 어디서든 불러와 동일한 객체로 동작할 수 있게 해준다. 코드의 구조는 어떨까? 코드는 이렇게, private으로 생성자를 두고, public static 클래스 getInstance로 클래스를 불러와 사용하게 해준다. 이렇게 되어있을 때, getInstance를 부를 때 클래스를 초기화 시키는 방식으로 '지연 초기화'된다. 지연 로딩은 이렇게 있는 구조와 동일하게 여겨진다. 이렇게 하면, 명시적으로 null값이면 초기화 시켜서 인스턴스를 반환하게 해준다. 이 때 문제는, 멀티 쓰레드일 때 생길..

CS 2023.04.21