전체 글

자료구조/선형 자료구조

[자료구조] 자바 해시 맵(HashMap)

Map은 키(Key)와 값(Value) 으로 이루어진 Entry객체 데이터를 보관하는 자료구조이다. java.util안에 존재한다. 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 가능하다. 해시 맵(HashMap) Map 인터페이스를 구현한 대표적인 Map 컬렉션이다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조이다. 여기서 키와 값은 모두 객체이다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 특정 데이터의 저장위치를 해시함수를 통해 바로 알 수 있기 때문에 데이터..

자바(Java)

자바 enum(열거형)

상수는 원래 final static string과 같이 만든다. 하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생되어 자바 1.5버전부터 새롭게 추가된 것이 바로 "Enum" 이다. Enum은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미한다. Enum 장점 코드가 단순해지며, 가독성이 좋다. 또한 리펙토링 변경 범위가 최소화된다. 자바의 열거형은 값과 타입을 모두 체크하기 때문에 하나라도 다르면 컴파일 시점에서 에러가 발생한다. 즉, type safe, 타입에 안정한 열거형을 제공한다. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다. EnumClass는 다른 클래스와 마찬가지로 별도의 java파일, 클래스 안, 클래스 밖에 선언 가능하다. Enum..

자바(Java)

자바 제네릭(Generic)

정적언어(C, C++, C#, Java)을 다뤄봤다면 제네릭(Generic)에 대해 한 번쯤은 들어봤을 것이다. 특히 자료구조 같이 구조체를 직접 만들어 사용할 때 많이 쓰이기도 하고 매우 유용하기도 하다. ArrayList나 LinkedList 등을 만들 때 보통 객체 객체명 = new 객체(); 같이 만든다. 안에 타입을 지정해줌으로써 특정 타입만 받아들이게 하는 것이다. 여기서 제네릭(Generic)은 타입이 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 즉, 특정 타입을 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 한다는 것이다. 컴파일 때 해당 타입으로 캐스팅하여 매개변수화 된 유형을 삭제하는 것이다. 제네릭 장점 잘못된 타입이 들어올 수 있는 것을 ..

자바(Java)

자바 this, this(), super, super()

자바 프로그래밍을 하다보면 자식생성자와 부모생성자의 변수 혹은 메서드의 이름이 같은 경우 구분을 해줘야한다. 그럴 때 this와 super를 사용한다. this와 this() 그리고, super와 super()는 맥락은 같지만 조금씩 쓰임새는 다르다. this() -> this 메소드는 생성자 첫 문장에서만 사용 가능하다. 같은 클래스 내부의 다른 생성자를 호출할 때 사용한다. this -> this 키워드는 인스턴스 자신을 가리키는 참조변수이다. 인스턴스의 주소가 저장되어, 숨겨진 채로 존재한다. static 메소드에서는 사용이 불가능하다. 왜냐하면 this 키워드는 인스턴스에서 사용이 가능한데 static 키워드는 객체를 생성하지 않아도 사용이 가능하기 때문이다. super() -> Object클래스..

자료구조/선형 자료구조

[선형 자료구조] 배열(Array)

배열(Array) 많은 수의 데이터를 다룰 때 사용하는 자료구조다. 각 데이터를 인덱스와 1:1 대응하도록 구성한다. 데이터가 메모리 상에서 연속적으로 저장된다.(연결리스트는 아니다.) 배열의 장점 - 인덱스를 이용하여 데이터에 빠르게 접근이 가능하다. 배열의 단점 - 미리 최대길이를 정해서 생성해야한다. 가변길이배열은 배열 크기를 변형할 때마다 새로운 배열을 만들어줘야한다. 배열 시간복잡도 ( Big O ) 삽입(Insertion) - O(1)(인덱스를 알 때 or 단순 add) / O(n) (인덱스를 모를 때 or 특정 데이터 삽입 시) 제거(remove) - O(1)(인덱스를 알 때 or 단순 remove) / O(n) (인덱스를 모를 때 or 특정 데이터 제거 시) 접근(access) - O(1)..

자료구조/선형 자료구조

[자료구조] 큐 / 원형 큐 / 양방향 큐

선형 큐(Queue) 컴퓨터의 기본 선형 자료구조 중 하나로 FIFO(First In First Out), 선입선출의 특징을 갖는다. 기본적으로 데이터 추가(Enqueue), 꺼내기(Dequeue), 큐 공간 확인 동작으로 이루어진다. 한쪽 끝을 front, 반대쪽 끝을 rear라고 할 때, rear로 데이터가 추가되고, front에서 데이터가 꺼내진다. 큐 오버플로우(Overflow), 언더플로우(Underflow) 오버플로우 - 큐 크기만큼 데이터가 꽉 차서 더이상 들어가지 않을 때 언더플로우 - 큐가 비어있는데 데이터를 꺼내려고 하는 경우 큐 사용처 입력 순서대로 데이터 처리가 필요할 때 사용한다. 프린트 출력 대기열 그래프 너비우선탐색(BFS - Breath First Search) 시간복잡도 (..

자료구조/선형 자료구조

[선형 자료구조] 스택(Stack)

스택(Stack) 컴퓨터의 기본 선형 자료구조 중 하나로 LIFO(Last In First Out), 후입선출의 특징을 갖는다. 기본적으로 데이터 추가(Push), 꺼내기(Pop), 스택 공간 확인 동작으로 이루어진다. 가장 먼저 데이터가 들어온 위치를 Bottom, 가장 마지막에 데이터가 들어온 위치를 Top이라고 한다. 스택 오버플로우(Overflow), 언더플로우(Underflow) 오버플로우 - 스택 크기만큼 데이터가 꽉 차서 더이상 들어가지 않을 때 언더플로우 - 스택이 비어있는데 데이터를 꺼내려고 하는 경우 스택 사용처 데이터가 입력된 순서의 역순으로 처리되어야 할 때 함수 콜 스택(함수1 안에서 함수2 안에서 함수3을 호출했을 때, 함수3이 끝나고 다시 함수2로 넘어가고 함수2가 끝나고 다시..

자바(Java)

자바 컬렉션 프레임워크(Collection Framework)

컬렉션 프레임워크(Collection Framework) 컬렉션 프레임워크는 자료구조와 알고리즘을 구조화해서 여러 데이터를 편리하게 관리할 수 있게 만들어 놓은 것의 기능들의 집합체같은 것이다. JDK 1.5부터는 Queue interface도 추가되었다. 이들을 쉽게 다루기 위한 Collections 클래스도 존재한다. 대표 인터페이스로는 List, Set, Map 인터페이스가 있다. https://nukoori.tistory.com/10 자바 자료형(Data type) + 자료구조 자료형은 아주 기초적인 개념이라 넘어가려고 했지만, 새로이 자바를 공부하면서 생각보다 모르는 부분이 많았기에 따로 정리해두려고 한다. 자료형(Data Type) 숫자(Number), 부울(Boolean), 문자(Charac..

자바(Java)

자바 JDK / JRE / JVM 구조

JDK ( Java Development Kit ) 자바로 개발하는데 필요한 도구들의 환경설정같은 것이다. JDK 버전은 여러 가지가 있는데, 나중에 쓸일이 있으면 추가적으로 해당 버전을 선택해서 적용해주면 된다. 자바를 개발함에 있어서 필요한 모든 것들의 집합체라고 보면 된다. JRE를 포함하고 있으며 javadoc, 컴파일러(javac)도 있다. JRE는 java를 실행함에 있어 필요한 환경을 말한다. JVM, java class library, java 명령어 등을 포함하고 있다. 즉 JDK > JRE > JVM같은 느낌이다. JVM은 클래스파일을 실행할 수 있다. 자바 클래스 로더와 자바 실행 엔진에 의존한다. 자바로 작성된 프로그램의 메모리 관리 및 최적화를 수행한다. 한번 컴파일된 파일은 어떤..

자바(Java)

자바 getter setter

자바에서는 private, public, protected, public과 같은 접근 제한자가 존재한다. 이를 통해 데이터를 외부로부터 숨기거나, 접근을 막고, 또는 접근에 처리를 강제화한다. 여기서 getter와 setter는 클래스 변수를 private으로 하고, 다른 메소드를 통해 제어하는 역할을 맡는다. private이 되면 해당 변수는 클래스 안에서만 노출되게 된다. getter getter는 다른 사람들로 하여금 사용할 필요가 있는 변수값을 가져올 수 있게 해주는 함수라고 보면 된다. 클래스 안에 private 변수 age, name이 있으면 바깥에서는 getAge(), getName()이라는 getter함수를 통해 private 변수임에도 값을 가져올 수 있게 도와주는 역할을 한다. 이렇게 ..

넉우리
넉우리의 성장노트