Java
-
Java 애너테이션Java 2024. 2. 26. 16:53
애너테이션이란? 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다, 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다. 소스코드의 주석에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML 문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했다 이 기능을 이용해서, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 자신이 작성한 소스코드 중 특정 메서드만 테스트하고 싶으면, @TEST라는 애너테이션을 메서드 앞에 붙인다. @TEST public void method(){ ~~~ } 모든 프로그램에 의미가 있지는 않고, 해당 프로그램에 미리 정의된 종류와 형식으로 작성해야만 의미가 있다. @TEST는 테스트 프..
-
Java 열거형(Enum)Java 2024. 2. 26. 16:41
열거형 서로 관련된 상수를 편하게 선언하기 위한 것, 상수를 정의 할 때 사용 C는 타입이 달라도 값이 같으면 조건식이 참이지만, 자바는 컴파일 에러다 열거형 정의와 사용 enum 열거형이름 {상수명1, 상수명2, ...} 동서남북 4방향 enum Direction{EAST, SOUTH, WEST, NORTH} 사용법은 '열거형이름'.'상수명' class Unit{ int x, y; Direction dir; void init(){ dir = Direction.EAST; } } 열거형 상수간 비교 '==' 사용 가능 equals()가 아닌 ==로 가능하다는 것은 그만큼 빠르다는 의미다. 하지만 같은 비교연산자는 사용할 수 없고, compareTo()는 사용 가능하다. 비교 대상이 같으면 0, 왼쪽이 크면..
-
Java 지네릭스(Generics)Java 2024. 2. 26. 11:01
지네릭스(Generics) 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에, 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여줌 >> 예를 들어, 다양한 종류의 객체를 담을 수 있긴 하지만, 보통 한 종류의 객체를 담는 경우가 더 많다. 그런데도 꺼낼 때마다 타입체크를 하고 형변환을 하는 것은 아무래도 불편하다. 또한, 원하지 않는 종류의 객체가 포함되는 것을 막을 방법이 없다는 것도 문제다. 이 것을 지네릭스가 해결해준다 1. 선언 클래스와 메..
-
Java 자료구조, 컬렉션 프레임웍 - 4, (Hash, Set, Map)Java 2024. 2. 26. 00:56
Hash 해시란 데이터를 다루는 기법 중에 하나로 검색과 저장이 빠르게 진행 데이터를 검색할 때 사용할 key와 실제 데이터의 값이 (value가) 한 쌍으로 존재하고, key값이 배열의 인덱스로 변환되기 때문에 검색과 저장의 평균적인 시간 복잡도가 O(1)에 수렴하게 됨 예시 만약, hello 라는 문자열을 정수형 key 값으로 바꾼다면, h + e + l + l + o -> 104 +101 + 108 + 108 + 111 = 532라는 해시코드로 변환 할 수 있음 HashSet Set 인터페이스를 구현한 대표적인 컬렉션, 중복 허용 X, 요소 추가시 add()나 addAll()사용, 중복 요소 추가 시도 시 false 반환 equals메서드를 이용한 비교에 의해, true를 얻은 두 객체에 대해 얻은..
-
Java 자료구조, 컬렉션 프레임웍 - 3, (Iterator, ListIterator, Enumeration)Java 2024. 2. 26. 00:52
Iterator, ListIterator, Enumeration 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스 Enumeration은 Iterator의 구버전 ListIterator는 Iterator를 상속받아 기능을 향상시킨 것, 이전 방향 조회기능 추가(List를 구현한 경우만 사용 가능), Iterator는 한 방향으로만 조회가 가능함 Collection 인터페이스와 List, Set, Queue 인터페이스의 계층구조는 알고 있었지만, Iterable이 Collection의 상위 인터페이스 인지는 잘 몰랐다. 그래서 인텔리제이에서 내부 구현 코드를 확인해봤다. public interface Collection extends Iterable { // Query Operations } 이렇..
-
Java 자료구조, 컬렉션 프레임웍 - 2, 스택과 큐Java 2024. 2. 26. 00:44
Stack과 Queue 스택 : 마지막에 저장한 데이터를 가장 먼저 꺼낸다 > 0, 1, 2 순서로 넣었으면 꺼낼 때는 2, 1, 0으로 꺼냄 활용 : 수식 계산, 수식 괄호 검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로 큐 : 처음 저장한 데이터를 가장 먼저 꺼낸다 > 0, 1, 2 순서로 넣었으면 꺼낼 때는 0, 1, 2로 꺼냄 활용 : 최근 사용 문서, 인쇄작업 대기목록, 버퍼(buffer) 순차적으로 데이터를 추가하고 삭제하는 스택에는 ArrayList, 큐는 ArrayList를 사용하면 첫번째를 꺼낼 때마다 빈공간을 채우기 위해 복사가 발생하므로 비효율적, LinkedList 사용 priorityQueue Queue 인터페이스의 구현체 중 하나 저장한 순서에 관계 없이 우선순..
-
Java 자료구조, 컬렉션 프레임웍 - 1, (List, Set, Map)Java 2024. 2. 26. 00:40
데이터 군을 저장하는 클래스들을 표준화한 설계 핵심 인터페이스 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식 후, 3개의 인터페이스 정의 List, Set, Map 이후 List, Set의 공통된 부분을 다시 뽑아서 Collection 인터페이스를 추가 정의 List : 순서가 있는 데이터의 집합, 데이터 중복 허용 o Set : 순서가 없는 데이터 집합, 중복 허용 x Map : 키와 값의 쌍으로 이루어진 데이터 집합, 키 중복 허용 x, 값 중복 허용 o 모든 컬렉션 클래스는 List, Set, Map 중 하나가 이름에 들어가 있어서 구별이 쉽지만, Vector, Stack, Hashtable, Properties같은 것들은 컬렉션 프레임웍보다 먼저 생겨서 명명법이 다름. 호환을 위해 설계를..
-
Java 날짜와 시간Java 2024. 2. 26. 00:30
Calendar, Date 클래스 Date는 jdk1.0부터, Calendar는 jdk1.1부터 출시했다. 그러나 부족한 점이 많아 jdk1.8부터 'java.time패키지'로 기존의 단점을 개선한 새로운 클래스들이 추가되었다. 하지만 20년 간 두 클래스가 계속 사용되어 왔고, 지금도 계속 사용 중이기 때문에 안배울 수 없다. 깊이 배울 필요는 없고, 간단한 것들을 이해하고 필요할 때 활용하는 정도면 충분하다 참고 여기서 말하는 Date클래스는 java.util 패키지에 속한 것이다. java.sql패키지의 Date클래스와 다르다 Calendar, GregorianCalendar Calendar는 추상 클래스라 직접 객체 생성이 안된다. 메서드를 통해 완전히 구현된 클래스의 인스턴스를 얻어야 한다. 예..