본문 바로가기

JAVA의 정석

(39)
ArrayList, HashSet, HashMap 1. ArrayList ArrayListsms List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다. 기존의 Vector를 개선한 것으로 원리와 기능적인 측면은 동일하다. 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장한다. 메서드 설명 메서드 설명 ArrayList() 크기가 10인 ArrayList를 생성 ArrayList(Collection c) 주어진 컬렉션이 저장된 ArrayList를 생성 ArrayList(int initialCapa) 지정된 초기용량을 갖는 ArrayList를 생성 bolean add(Object o) ArrayList의 마지막에 객체를 추가. 성공하면 true vo..
컬렉션 프레임웍(Collections Framework) 1. 컬렉션 프레임웍 (Collections Framework) 컬렉션 프레임웍이란, 데이타들을 저장하는 클래스들을 표준화한 설계이다. 컬렉션 프레임웍에서는 그룹을 크게 3가지 존재하는데, 상속계층도는 아래와 같다. 인터페이스 List와 Set을 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통된 부분을 다시 뽑아 Collection 인터페이스를 정의할 수 있었지만, Map 인터페이스는 이들과는 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 상속계층도에 포함되지 못했다. 인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. Set 순서를 유지하지 않는 집합, 데이터 중복을 불허한다. Map 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않..
LocalDate와 Localtime, LocalDateTime 클래스 1. java.time 패키지 Date와 Calendar가 가지고 있던 단점들을 해소하기 위해 JDK 1.8부터 'java.time패키지'가 추가되었다. 이 패키지는 다음과 같이 4개의 하위 패키지를 가지고 있다. 패키지 설명 java.time 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 java.time.chrono 표준(ISO)이 아닌 달력 시스템을 위한 클래스들을 제공 java.time.temporal 날짜와 시간의 필드(field)와 단위(unit)을 위한 클래스들을 제공 java.time.zone 시간대(time-zone)와 관련된 클래스들을 제공 위의 패키지들의 가장 큰 특징은 String클래스처럼 '불변(immutable)'이라는 것이다. 그래서 날짜나 시간을 변경하는 메서드들은 기존..
Calendar와 Date 클래스 1. Calendar와 Date Date는 날짜와 시간을 다룰 목적으로 JDK 1.0부터 제공되어온 클래스이다. 하지만 부족한 점이 많아 JDK 1.1부터 Calendar 라는 새로운 클래스를 내놓았고, 전보다는 나았지만 몇 가지 단점들이 발견되었다. 이를 보완하기 위해 JDK 1.8부터 'java.time'패키지로 새로운 클래스들이 추가 되었다. 자바의 역사가 긴 터라 Calender와 Date는 배우지 않을 수 없었다. Calendar는 추상 클래스이기 때문에 직접 객체를 생성할 수 없어, 메서드를 통해 인스턴스를 얻어야 한다. Calendar cal = new Calendar(); // 에러 !! 추상클래스는 인스턴스 생성 불가. // OK, getInstance() 메서드는 Calendar 클래스..
래퍼(wrapper) 클래스와 오토박싱&언박싱 1. 래퍼(wrapper) 클래스 객체지향 개념에서 모든 것은 객체로 다루어져야 한다. 그러나 자바에서는 8개의 기본형을 객체로 다루지 않는데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 얘기를 듣는 이유이다. 그 대신 보다 높은 성능을 얻을 수 있다. 때로는 기본형(primitive type) 변수도 어쩔 수 없이 객체로 다뤄야 하는 경우가 있다. 예를 들면, 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야 할 때, 객체간의 비교가 필요할 때 등등의 경우에는 기본형 값들을 객체로 변환하여 작업을 수행해야한다. 이 때 사용되는 것이 래퍼(wrapper)클래스이다. 아래는 8개의 기본형의 래퍼클래스이다. 기본형 래퍼클래스 생성자 활용예 boolean Boolean Boolean(bo..
Math 클래스 1. Math 클래스 Math클래스의 생성자는 접근제어자가 private이기 때문에 다른 클래스에서 Math인스턴스를 생성할 수 없도록 되어있다. 그 이유는 클래스 내에 인스턴스 변수가 하나도 없어서 인스턴스를 생성할 필요가 없기 때문이다. Math 클래스의 메서드는 모두 static 이며, 아래와 같이 2개의 상수만 정의 해놓았다. public static final double E = 2.7182818284590542354 ; // 자연로그의 밑 public static final double PI = 3.14159265358979323846 ; // 원주율 올림, 버림 반올림 소수점 n번째 자리에서 반올림한 값을 얻기 위해서는 round()를 사용해야 하는데, 이메서드는 항상 소수점 첫째자리에서 반..
StringBuffer 클래스 1. StringBuffer 클래스 String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer 클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때, 그 크기를 지정할 수 있다. 이 때, 편집할 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다. 편집 중인 문자열이 버퍼의 길이를 넘어서게 되면 버퍼의 길이를 늘려주는 작업이 추가로 수행되어야 하기 때문이다. StringBuffer클래스는 String클래스와 유사한 점이 많다. 아래의 코드에서 알 수 있듯이, StringBuffer 클래스는 String클래스와 같이 문자열을 저장하기 위한 char형 배열의 참조변수를 ..
String 클래스(2) - join()과 StringJoiner 1. join()과 StringJoiner클래스 join()은 여러 문자열 사이에 구분자를 넣어서 결합한다. 구분자로 문자열을 자르는 split()과 반대의 작업을 한다고 생각하면 이해하기 쉽다. String animals = "dog,cat,bear"; String[] arr = animals.split(",") ; //문자열을 ','를 구분자로 나눠서 배열에 저장 String str = String.join("-", arr); // 배열의 문자열을 '-'로 구분해서 결합 System.out.println(str); // dog-cat-bear java.utill.StringJoiner클래스를 사용해서 문자열을 결합할 수도 있는데 아래의 코드를 보는 것만으로도 이해가 될 것이다. public class..