본문 바로가기
  • Jetpack 알아보기

Java & Kotlin7

[Java] String에 대한 고찰 : StringBuilder, StringBuffer, String Pool Java에서는 문자열을 저장하는 자료형으로 String을 제공합니다. String 클래스에는 문자열 관련 작업을 할 때 유용한 다양한 메소드를 제공합니다. 대표적인 특징은 다음과 같습니다. 1. String은 불변 객체입니다. 인스턴스가 한 번 생성되면 그 값을 읽기만 가능하고, 수정이 불가능합니다. 2. String은 final class이기 때문에 상속받을 수 없습니다. 이러한 특징 때문에 Java는 문자열을 가변적으로 수정할 수 있도록 StringBuilder와 StringBuffer 클래스를 제공합니다. 이외에도 계속 생성되는 인스턴스로 인한 메모리 이슈를 생각하여 String Pool이라는 것도 고안했습니다. 이제부터 StringBuilder, StringBuffer 그리고 String Pool.. 2021. 9. 8.
자바의 객체 지향적 특징 (1) - 상속(Inheritance) INTRO 객체 지향 언어의 특징 중 하나는 상속(Inheritance)입니다. 이것만큼 워딩 그대로 그 뜻을 잘 표현하는 것은 없는 것 같습니다. 상속은 말 그대로 한 클래스가 다른 클래스의 속성(메서드 및 필드)을 획득하는 것입니다. 보통 다른 클래스의 속성을 받는 클래스를 하위 클래스(자식 클래스), 특성을 주는 클래스를 상위 클래스(부모 클래스)라고 합니다. 상속을 이용하면 상위 클래스의 속성을 재사용하여 반복된 코드 중복을 줄일 수 있습니다. 하지만 객체 간의 속성과 관계를 잘 고려하여 상속을 이용하고, 구조를 설계하는 것이 중요합니다. 무분별한 상속은 오히려 객체 간의 결합도를 높여 유지보수와 수정이 어려워질 수 있습니다. extends 키워드 extends는 클래스의 속성을 상속하는 데 사용.. 2021. 7. 14.
자바의 객체 지향적 특징 (INTRO) - 객체 지향 프로그래밍과 SOLID 원칙 INTRO Java 프로그램은 객체를 생성하고, 메소드를 호출해서 통신하는 대표적인 객체 지향(Object Oriented) 언어입니다. 따라서 Java는 객체 지향 대표적인 특징인 캡슐화, 상속, 다형성, 추상화 등을 지원합니다. 이제부터 객체 지향 프로그래밍의 개념을 다지고, Java가 가지는 객체 지향적 특징을 하나하나 알아보려고 합니다. 객체 지향 프로그래밍 (Object Oriented Programming, OOP) 객체 지향 프로그래밍(OOP)에 대한 개념은 면접 단골 질문입니다. Java 개발자라면 OOP가 무엇인지 알고 있지만, 막상 설명을 하려고 하면 입이 잘 안 떨어지는 경우가 있습니다. (제가 그렇습니다.) 먼저, 위키 백과에서 정의된 OOP의 정의는 다음과 같습니다. 객체 지향 프.. 2021. 5. 27.
[Java] 정렬 알고리즘 (4) - 퀵 정렬 (Quick Sort) 퀵 정렬 (Quick Sort) 1. Pivot 값을 기준으로 왼쪽에서부터 검사해서 큰 값을, 오른쪽에서부터 작은 값을 발견한다. 2. 두 값을 바꾸기 연산하고, 같은 과정을 수행한다. 3. 큰 값의 index 와 작은 값의 index 가 교차하는 경우, 작은 값과 Pivot 값을 바꾸기 연산한다. → Pivot 값을 기준으로 왼쪽은 Pivot 값보다 작은 값들, 오른쪽은 큰 값들로 분할된다. 4. 분할된 영역에서 같은 과정을 수행한다. → 재귀 성격 3. 시간 복잡도 : O(𝑁𝑙𝑜𝑔𝑁) 4. 작은 값과 큰 값으로 분할을 할 수 없는 경우 = 이미 정렬되어 있는 경우 : O(𝑁²) import java.util.Arrays; public class QuickSort { int[] array = new .. 2021. 5. 23.
[Java] 정렬 알고리즘 (3) - 삽입 정렬 (Insertion Sort) 삽입 정렬 (Insertion Sort) 1. 앞의 원소들이 이미 정렬이 되어 있다고 가정한다. 2. 특정 원소에서 앞의 원소들을 살펴보며 적당한 위치를 찾는 것 3. 시간 복잡도 : O(𝑁²) 4. 선택 정렬, 버블정렬보다 효율적인 알고리즘 → 필요 시에 바꾸기 연산을 수행하기 때문. 특히 이미 정렬이 되어 있을 경우에는최고의 효율을 보여준다. import java.util.Arrays; public class InsertSort { int[] array = new int[]{10, 2, 5, 8, 12, 73}; public void sort() { int j, temp; for (int i = 0; i = 0 && a.. 2021. 5. 23.
[Java] 정렬 알고리즘 (2) - 버블 정렬 (Bubble Sort) 버블 정렬 (Bubble Sort) 1. 두 숫자를 비교해서 더 작은 숫자를 왼쪽에 두는 것 2. 반복이 끝났을 때, 최댓값이 맨 뒤에 있게 된다. 3. 시간 복잡도 : O(𝑁²) 4. 선택 정렬보다 비효율적인 알고리즘 → 선택 정렬은 비교하면서 최솟값을 저장하고, 한 번 반복이 끝나고 바꾸기 연산을 수행하지만 버블 정렬은 비교할 때마다 바꾸기 연산이 이뤄지기 때문이다. import java.util.Arrays; public class BubbleSort { int[] array = new int[]{10, 2, 5, 8, 12, 73}; public void sort() { int temp; for (int i = 0; i < array.length; i++) { for (int j = 0; j < .. 2021. 5. 23.
[Java] 정렬 알고리즘 (1) - 선택 정렬 (Selection Sort) 선택 정렬 (Selection Sort) 1. 가장 작은 숫자를 가장 앞에 두는 것 2. 반복이 끝났을 때, 최솟값이 맨 앞에 있게 된다. 3. 시간 복잡도 : O(𝑁²) import java.util.Arrays; public class SelectionSort { int[] array = new int[]{10, 2, 5, 8, 12, 73}; public void sort() { int min, temp, index = 0; for (int i = 0; i array[j]) { min = array[j]; index = j; } } temp = .. 2021. 5. 23.