본문 바로가기

분류 전체보기

(139)
CS Study 6주차 : Hashing / 해시 테이블(Hash Table) Hashing 주어진 키 값을 이용하여 목표 레코드 주소를 직접적으로 계산하는 방법 키 값에 연산(해시 함수)을 적용하여 도출된 결과 값이 찾고자 하는 레코드가 있는 위치 주소가 된다. 해시 함수 : 어떤 k에 대한 테이블 주소를 계산하기 위한 방법으로, 주어진 키 값으로부터 레코드가 저장되어 있는 주소를 산출해 낼 수 있는 수식 구성 요소 단점 오버플로우가 일어나면 별개의 버킷을 할당하여 처리할 수밖에 없다. -> 결국 또 한번의 디스크 입출력을 필요하게 만들기 때문에 해싱 기법에서는 이 충돌로 인한 오버플로우를 어떻게 처리하느냐가 중요하다. 단순히 버킷 크기를 크게 한다면 오버플로는 감소하지만, 저장 공간 효율 또한 감소하고, 버킷 내 레코드 탐색 시간이 증가한다. 어떤 키값이 들어오더라도 균일하게 ..
iOS Study : 5주차 - SwiftUI 암호화 된 입력값을 보여주는 방법 SecureField를 사용한다. import SwiftUI struct ContentView: View { @State var myPassword: String = "" @State var isSecureMode: Bool = true var body: some View { VStack { Text(myPassword) HStack { if isSecureMode { SecureField("Password", text: $myPassword ) .textFieldStyle(.roundedBorder) } else { TextField("Password", text: $myPassword) .textFieldStyle(.roundedBorder) } Button { is..
iOS Study : 5주차 - 옵셔널 심화(옵셔널 체이닝, nil 병합 연산자, 타입 캐스팅) / assert와 guard 옵셔널 체이닝(Optional Chaining) 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또 다시 옵셔널이 연속적으로 연결되는 경우에 유용하게 사용할 수 있다. 사용 class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? var owner: Person? init(dong: String, ho: String) { buildingNumber = dong roomNumber = ho } } let yag..
iOS Study : 5주차 - 타입 심화(프로퍼티, 상속) 프로퍼티 프로퍼티는 클래스, 구조체, 열거형과 연관된 값이다. 타입과 관련된 값을 연산할 수도, 저장할 수도 있다. 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 저장 프로퍼티와 연산 프로퍼티 프로퍼티는 구조체, 클래스, 열거형 내부에 구현이 가능하지만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var로만 선언 가능하다. 연산 프로퍼티는 읽기 전용으로는 구현 가능하지만, 쓰기 전용으로는 불가능 하다. 읽기 전용으로 구현하려면 get 블럭을 작성해 주고, 읽기와 쓰기는 get set블럭을 모두 구현해야 한다. set 블록에서 암시적 매개변수 newValue를 사용할 수 있다. struct Student { // 인스턴스..
Java Study : 5주차 - 백준 문제풀이 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int arr[] = new int[26]; String str = in.nextLine().toUpperCase(); char ch = '?'; int max = -1; for(int i=0; i
Java Study : 5주차 정리 - 추상 클래스 추상 클래스 추상 클래스는 구체적이지 않은 클래스로 abstract class 라고 하며, 추상 클래스가 아닌 클래슨느 concrete class라고 한다. 추상 클래스는 항상 추상 메서드를 포함하는데, 추상 메서드는 구현 코드가 없다. int add(int x, int y) { return x + y; } { } 안의 내용을 함수의 구현부라고 하며 이 부분이 없는 함수를 추상 함수라 하고 자바에서는 추상 메서드라고 한다. 추상 메서드는 선언만 하며 abstract 예약어를 사용하고 { } 대신 ;를 쓴다. 즉, 추상 메서드는 abstract 예약어를 사용항 선언만 하는 메서드이다. abstract int add(int x, int y); 추상 클래스 구현 package abstractex; public..
CS Study 5주차 : Primary Index vs Secondary Index / Composite Index Primary Index 특징 테이블당 하나만 가질 수 있다. Insert시 data가 정렬되고 Index는 data block의 첫 번째 레코드의 주소값을 갖게 된다. Index가 바로 data block에 접근해서 Secondary Index보다 동작이 빠른 편이다. data가 정렬되어 저장되기 때문에 Secondary Index에 비해 범위로 질의를 하는 것이 유리하다. 아래는 범위로 검색하는 예시이다. id=101~104번의 학생을 찾는다고 하면 Index block을 scan한 후에 data block 1을 가져오고 data block 2를 가져오면 범위를 검색할 수 있다. 이렇게 되면 총 3~4번의 I/O이 발생하게 된다. Secondary Index 특징 Primary Key 이외에 필요한 ..
CS Study 5주차 : Index(인덱스) Index(인덱스) 데이터베이스에서 데이터를 검색할 때 모든 데이터를 검색해서 원하는 결과를 찾으려면 시간이 오래 걸린다. 때문에 컬럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두어 데이터 검색 속도를 향상시킨다. 즉, 데이블에 대한 동작속도를 높여주는 자료구조이다. 원리 Index를 해당 컬럼에 주게 되면 초기 Table 생성 시 FRM, MYD, MYI 3개의 파일이 만들어진다. FRM : 테이블 구조가 저장되어 있는 파일 MYD : 실제 데이터가 있는 파일 MYI : Index 정보가 들어있는 파일 Index를 사용하지 않는 경우에는 MYI 파일이 비어 있지만 Index를 해당 컬럼에 만들게 되면 해당 컬럼을 따로 인덱싱하여 MYI 파일에 입력한다. 이후 사용자가 Ind..