전체 글
-
[Java] String, StringBuffer, StringBuilderJava 2022. 1. 3. 20:11
자바에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다. 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용하기 위해 각자의 특징과 장단점에 대해 알아보려고 한다. String vs StringBuffer/StringBuilder String과 StringBuffer/StringBuilder의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다. 다음과 같은 예를 들어보자. String str = new String("hello"); // "hello" str = str + " world"; // "hello world" 우리는 위와 같이 String 객체에 문자열을 추가하여 사용한 경험이 있을 것이다. ..
-
[Java] Identity와 EqualityJava 2022. 1. 3. 18:03
동일성(Identity)와 동등성(Equality) 이전 포스팅에서 원시 타입과 참조 타입에 대해 알아보았다. 참조 타입의 객체를 비교할 때는 원시 타입 변수와 달리 값의 비교가 동일성, 동등성 두 가지의 의미를 가지게 된다. 동일성(Identity) 비교는 참조값을 비교하기 때문에 속성과 타입이 같아도 참조값이 다르면 다른 객체로 구분한다. 동등성(Equality) 비교는 equals 함수를 통해 객체의 속성을 비교한다. 하지만 객체의 최상위 클래스인 Object 클래스의 equals 함수를 보면 다음과 같이 파라미터로 받은 인스턴스와 메서드를 호출한 인스턴스 간의 동일성 비교(==)를 한다. public boolean equals(Object obj) { return (this == obj); } 다..
-
[Java] Primitive type과 Reference typeJava 2022. 1. 3. 16:58
자바에서 타입을 크게 두 가지로 분류할 수 있다. 하나는 원시 타입(primitive type), 또 다른 하나는 참조 타입(reference type)이다. 원시 타입: boolean(1 byte), char (2 bytes), byte(1 byte), short(2 bytes), int(4 bytes), long(8 bytes), float(4 bytes), double(8 bytes) 참조 타입: Integer, Long, Double 등 new 연산자로 생성할 수 있는 객체 원시 타입 vs 참조 타입 원시 타입과 참조 타입의 기능적 차이는 크게 2가지가 있다. 1. null을 담을 수 있는가 ❔ 원시 타입은 null을 담을 수 없지만 참조 타입은 null을 담을 수 있다. int i = null;..
-
[Java] Shallow copy와 Deep copyJava 2022. 1. 2. 23:30
코드를 짜다보면 배열이나 객체를 복사해야 하는 경우가 발생한다. 이때 실수로 복사를 잘못할 경우 이슈가 생길 수 있기 때문에 주의해야 한다. 이를 위해 얕은 복사와 깊은 복사의 차이점에 대해 명확하게 이해하고 넘어가고자 한다. 얕은 복사(Shallow copy)와 깊은 복사(Deep copy) 얕은 복사(Shallow copy)는 주소값을 복사(스택 영역)하기 때문에 참조하고 있는 실제 값은 같다. 깊은 복사(Deep copy)는 실제 값을 메모리 공간에 복사(힙 영역)하기 때문에 참조하고 있는 실제 값이 다르다. 이해를 쉽게 하기 위해 코드로 알아보도록 하자. 다음과 같이 이름, 나이를 가지는 Person 클래스가 있다고 가정해보자. public class Person { String name; int..
-
SQL 테스트 준비CS/Database 2022. 1. 2. 21:59
JOIN INNER JOIN SELECT A.NAME FROM A INNER JOIN B ON A.ID = B.ID; LEFT OUTER JOIN SELECT A.NAME FROM A LEFT OUTER JOIN B ON A.ID = B.ID; LEFT JOIN EXCLUDING INNER JOIN SELECT A.NAME FROM A LEFT OUTER JOIN B ON A.ID = B.ID WHERE B.ID IS NULL; RIGHT OUTER JOIN SELECT A.NAME FROM A RIGHT OUTER JOIN B ON A.ID = B.ID; RIGHT JOIN EXCLUDING INNER JOIN SELECT A.NAME FROM A RIGHT OUTER JOIN B ON A.ID = B..
-
[Java] Error와 ExceptionJava 2022. 1. 2. 12:22
컴파일 오류와 런타임 오류 프로그램을 실행하다가 보면 어떠한 원인때문에 비정상적인 동작을 일으시켜 프로그램이 종료되는 상황을 자주 볼 수 있다. 이를 우리는 프로그램에 오류가 발생했다고 말한다. 에러의 종류로는 컴파일할 때 발생할 수 있는 컴파일 오류와 실행 중에 발생하는 런타임 오류 두 종류가 있다. 컴파일 오류 컴파일 오류는 소스코드를 .class 파일을 컴파일하는 과정에서 JVM이 던지는 오류로, 대부분 소스코드 자체의 문법적 오류로 인해 발생하는 경우가 대부분이며, 프로그램 자체에서 처리할 수 있는 방법은 없다. 컴파일 오류의 예로는 ClassNotFoundException, IllegalAccessException, NoSuchMethodException 등이 있다. 런타임 오류 런타임 오류는 ..
-
[Data Structure] TrieCS/Data Structure 2021. 12. 29. 18:28
Binary Trie 특징 이진 탐색 트리 형태의 불균형 트리 자료구조이다. 완전 매칭과 부분 매칭에 효율적인 자료구조이다. 해시의 대체로 사용된다. 두 타입의 노드를 가진다. - Branch(link, interior, non-leaf) Node: 데이터 없이 자식 노드의 포인터만 저장 - Element(data, leaf) Node: 데이터 저장 시간복잡도: O(k), k=키의 최대 비트 수 Search(탐색) 탐색할 데이터를 K라고 할 때 i번째 레벨에서 K의 i번째 비트 = 0 → 왼쪽 서브 트리 이동 K의 i번째 비트 = 1 → 오른쪽 서브트리 이동 리프 노드에 저장된 데이터과 탐색할 데이터를 비교한다. Insertion(삽입) Insert 00001 Insert 10011 Insert 0010..
-
[Data Structure] T TreeCS/Data Structure 2021. 12. 28. 16:08
T Tree T 트리는 AVL 트리의 이진 탐색 특성 및 높이 균형과 B 트리의 업데이트와 저장 효율 장점을 모두 취한 MMDB(Main-Memory Database) 최적화 트리이다. Background AVL 트리의 공간 낭비와 잦은 회전 연산을 개선하기 위해 만들어짐 AVL 트리가 하나의 노드에 데이터 한 개만을 가지는 대신 T 트리는 하나의 노드가 n개의 데이터를 가질 수 있도록 개선한 구조임 장점 B 트리의 엔트리가 해당 레코드를 포함하는 데이터 페이지를 가리키고 있는데 반해 T 트리의 각각의 엔트리가 해당 레코드의 메모리 주소를 직접 포인팅하고 있기 때문에 T 트리 인덱스는 논리적 주소를 물리적 주소로 변환하는 작업 없이 원하는 레코드를 빠르게 접근할 수 있음. T 트리는 인덱스 노드에 키 값..