자바 6

[etc] 배열은 좌표계다

코딩을 하다 보면 배열을 다룰 때가 많은데 가끔 배열을 마치 좌표계처럼 생각하고 이용하는 나를 볼 수 있었다. A[x] = y처럼 말이다. A[y][x] = z처럼도 나타낼 수 있다. n차원 배열은 n+1차원 좌표계 그 자체로 사용하거나 n차원 데이터에 어떤 작업을 해줄 수 있다.함수에 배열을 포함시키면 함수값을 저장하고 있을 수도 있다.int A[];public void plus(int a) { A[a] = a + 1;} 배열을 좌표계처럼 보는 이러한 접근법을 다차원 배열을 이해하는데 보다 직관적인 인사이트를 제공해 주는 것 같다. 실제 이미지 처리, 그래픽스, 행렬계산, 시뮬레이션과 같은 분야에서 다차원 배열이 많이 사용되니 이와 같은 시각으로 배열을 한번 바라보는 것도 좋을 것이다.

개발/etc 2024.07.21

[Algorithm] 버킷 리스트 없이 버킷정렬을 구현할 수 있을까?(feat. 계수 정렬, 향상된 버킷정렬)

버킷 정렬버킷 정렬은 원소들이 균등 분포(Uniform Distribution) 일 때 유용하게 사용할 수 있는 정렬 알고리즘입니다. 버킷 정렬 알고리즘의 대략적인 흐름은 다음과 같습니다.[a, b] 범위의 원소들을 [0, 1)의 범위로 매핑시켜 준다.각각의 원소들의 배열의 사이즈(n)를 곱하여 정수부만 취하여 인덱싱 해준다.(이때 0~n-1 인덱스 각각의 기댓값은 1로 균등하다.)버킷 리스트(리스트 배열)에 인덱싱 된 값들을 매핑하여 넣어준다.각각의 버킷을 부분 정렬한다.정렬된 원소들을 원래 리스트에 복사해 준다. 이러한 버킷 정렬의 시간 복잡도는 Θ(n)로 이론상 매우 뛰어나지만 다른 Θ(nlogn) 정렬 알고리즘보다 조금 느린 정도의 퍼포먼스를 보여줍니다. 왜냐하면 버킷 리스트를 생성하고 관리하는데..

개발/Algorithm 2024.07.14

[Data Structures] 리스트 - 배열 리스트

리스트란?가장 대표적이면서 기본적인 자료구조를 뽑으라면 리스트를 뽑을 수 있습니다. 리스트란 '줄 세워져 있는 데이터' 또는 '죽 늘어선 데이터'를 의미합니다. 예를 들어 쇼핑 목록 리스트, 고객 리스트 등 연속적으로 저장된 데이터 등을 예로 들 수 있습니다. 리스트의 작업이러한 리스트를 구현하려면 원소의 삽입이나 삭제 등의 작업을 구현해야 할 것입니다. 리스트의 기본적인 작업 목록을 ADT(추상 데이터 타입) 리스트로 나타내면 아래와 같습니다.i번째 자리에 원소 x를 삽입한다.i번째 원소를 삭제한다.원소 x를 삭제한다.i번째 원소를 알려준다.원소 x가 몇 번째 원소인지 알려준다.리스트의 사이즈(총 원소의 수)를 알려준다.리스트 구현이러한 리스트를 구현하는 방법에는 크게 배열에 원소들을 쭉 배치하는 방법..

[Java] 지네릭스(generics)

지네릭스란?지네릭스란 jdk1.5부터 도입된 개념으로 여러 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 단계에서 타입체크(compile-time type check)를 해주는 기능입니다.이에 따라 객체의 타입 안정성이 높아지고 형변환의 번거로움이 줄어들게 되었습니다.지네릭 클래스 선언과 사용지네릭 타입은 클래스와 메서드에 선언할 수 있습니다. 먼저 클래스에는 아래와 같이 선언된 클래스 Box를 지네릭 클래스로 선언하고 싶으면 클래스 옆에 ''를 붙이고 object를 'T' 로 바꿔주면 선언이 됩니다.class Box{ object item; void setItem(object item){this.item = item;} object getItem(){return item;}}c..

개발/Java 2024.05.25

[Java] 인터페이스(Interface)

자바에서는 추상 메서드(abstract method)라는 개념이 있습니다. 추상 메서드란 아래와 같이 메서드의 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것 입니다.abstract void example1(int num1, int num2); abstract void example2(String name);이와 같은 추상 메서드를 포함하고 있는 클래스를 추상 클래스(abstract class), 오직 추상 메서드와 상수만을 멤버로 가지는 클래스를 인터페이스(interface)라고 합니다. 이와 같이 메서드를 미완성 상태로 선언해 놓는 것이 무슨 의미가 있을까요? 그것은 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상클래스에서는 선언부만 작성해 놓고, 실제 내용은 상속받는 ..

개발/Java 2024.05.15

[Java] hashCode와 equals 오버라이드(hashCode는 주소값이 아니다.)

import java.util.*; public class Main { public static void main(String[] args) { int[] array = new int[5]; System.out.println(array); } }위의 코드를 실행시키면 [I@44a5eaa 와 같은 값이 출력됩니다. 이 값은 무엇을 뜻하는 걸까요? 참조형 변수자바에서 기본형 변수 이외의 모든 변수는 참조형 변수로 참조형 변수는 객체의 주소값을 저장하고 있습니다. array라는 변수도 마찬가지로 정수형 배열이 저장되어 있는 주소를 담고 있습니다. 위 그림과 같이 말이죠 하지만 자바에서는 주소에 직접 접근하는 것은 막고 있기 때문에 메모리 주소 값은 아닙니다. @앞의 [I는 클래스 식별자로 해당 객체가 inte..

개발/Java 2023.12.16