목록자바 (86)
삶 가운데 남긴 기록 AACII.TISTORY.COM
Set 순서를 유지하지 않고, 중복을 허용하지 않는 컬렉션 입니다. 수학에서의 집합과 유사한 개념입니다. 순서나 인덱스가 없기 때문에 Iterator 를 이용해서 값에 접근해야 합니다. HashSet Set 인터페이스를 구현한 클래스 입니다. HashSet은 객체를 저장하기 전에 객체의 해시코드를 얻어내고 이미 저장되어 있는 객체들의 해시코드와 비교해서 중복된 값이 있는지 검사합니다. public class HashSetEx { public static void main(String[] args) { Set set = new HashSet(); set.add("Java"); set.add("JDBC"); set.add("Servlet"); set.add("Java");//중복해서 저장되지 않음 set.a..
List 컬렉션 순서를 유지하며 객체를 저장하며 중복해서 저장할 수 있습니다. ArrayList 인덱스 정보가 있는 List 컬렉션입니다. 인덱스가 있으므로 삽입과 삭제가 빈번한 구조에서는 바람직하지 않습니다. 이런 경우 LinkedList를 사용하는 것이 좋습니다. java 1.5부터 제네렉을 통해 객체의 타입을 지정해줘서 불필요한 casting을 하지 않아도 됩니다. import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayListEx { public static void main(String[] args) { List list = new ArrayList(); list.add("1st");..
Lambda Expressions 함수형 프로그래밍은 병렬처리와 이벤트 처리에 효율적이어서, 객체지향 언어인 자바에서도 함수형 프로그래밍의 장점을 도입하기 위해 람다식이 자바 8부터 도입되었습니다. 람다식은 익명함수를 생성하기 위한 식입니다. 기본 문법 (타입, 매개변수) -> {실행문; } (int a)->{System.out.println(a);} 매개변수의 타입은 자동 인식 될 수 있기 때문에 생략 가능합니다. (a)->{System.out.println(a);} 매개변수가 한개만 있다면 소괄호도 생략 가능합니다. 실행문도 한개만 있다면 중괄호도 생략 가능합니다. a->System.out.println(a) 만약 매개변수가 없다면 소괄호를 반드시 표기 해야 합니다. ()->System.out.pri..
제네릭 타입은 JDK5부터 지원됩니다. 제네릭은 잘못 사용된 데이터 타입 때문에 발생하던 문제를 컴파일 과정에서 제거하고 불필요한 casting을 하지 않도록 해줍니다. 제네릭 타입 public class BoxExample { public static void main(String[] args) { Box box1 = new Box(); box1.set("BOX"); String str = box1.get(); System.out.println(str); Box box2 = new Box(); box2.set(4); int value = box2.get(); System.out.println(value); } } class Box{ private T t; public T get() {return t;}..
스레드 풀 스레드 풀은 작업 스레드를 제한된 개수(총 개수)만큼 정해놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리합니다. 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리 합니다. 스레드 풀(작업 큐)로 병렬 처리를 한다면 갑자기 스레드가 폭증하는 상황에서도 성능 저하를 최소화 할 수 있습니다. 스레드 풀은 java.util.concurrent 패키지의 ExecutorService 인터페이스와 Executors 클래스를 제공하고 있습니다. 스레드 풀 생성 Executors 클래스의 newCachedThreadPool()이나 newFixedThreadPool(int n Threads) 으로 생성 할 수 있습니다. 스레드 풀 종료 스레드 풀은 데몬 스레드가 아니기 때문에..
자바 어플리케이션은 main()스레드 외에 병렬로 처리하는 스레드를 같이 실행할 수 있습니다. 보통은 멀티 스레드로 병렬로 작업하는 것이 효율적이지만, 너무 많은 스레드를 실행하면 각 스레드간 context switching 에 시간을 더 소비하게 되어 오히려 효율이 떨어지게 됩니다. java.lang.Thread 클래스로부터 extends 하거나 Runnable 인터페이스로부터 implements 해서 스레드를 생성할 수 있습니다. Runnable 구현 방법 import java.awt.Toolkit; public class BeepTask implements Runnable { @Override public void run() { Toolkit toolkit = Toolkit.getDefaultToo..
DecimalFormat 숫자 데이터를 원하는 형식으로 표현하기 위한 클래스 입니다. import java.text.DecimalFormat; public class DeciamlFormatEx { public static void main(String[] args) { double num = 1234567.89; DecimalFormat df = new DecimalFormat("0");//10진수, 빈자리는 0으로 채움 System.out.println(df.format(num)); df = new DecimalFormat("0.0");//소수점 표현 System.out.println(df.format(num)); df = new DecimalFormat("0000000000.00000"); Syst..
Date 클래스 현재 날짜 출력을 위한 클래스입니다. 날짜를 표기하는 포멧을 지정하려면 SimpleDateFormat 클래스를 이용합니다. import java.text.SimpleDateFormat; import java.util.Date; public class DateEx { public static void main(String[] args) { Date now = new Date(); String strNow1 = now.toString(); System.out.println(strNow1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String strNow2 = sdf.format(now); System.out.p..
Math 클래스 수학 계산용 메서드들을 제공합니다. 대부분 static 이므로 인스턴스 생성 없이 바로 사용가능 합니다. public class MathEx { public static void main(String[] args) { int v1 = Math.abs(-5);//절대값 double v2 = Math.ceil(5.3);//올림 double v3 = Math.floor(-5.3); //내림 int v4 = Math.max(5, 9);//최대값 double v5 = Math.min(5.1, 2.3);//최소값 double v6 = Math.random();//0 이상 1 미만 랜덤 숫자 long v7 = Math.round(5.6);//반올림 System.out.println(v1); Syste..
자바는 기본 데이터 타입을 값으로 갖는 객체를 생성할 수 있습니다. 이러한 객체를 wrapper class 라고 합니다. byte : Byte char : Character short : Short int : Integer long : Long float : Float double : Double boolean : Boolean Boxing/Unboxing boxing: 기본 데이터 타입을 래퍼 클래스로 변환 unboxing: 래퍼클래스를 기본 데이터 타입으로 변환 public class BoxingUnBoxing { public static void main(String[] args) { //boxing Integer obj1 = new Integer(100); Integer obj2 = new Int..
Arrays 클래스에는 배열 관련된 기능들을 제공합니다. 모든 메서드는 static이기 때문에 클래스 이름으로 바로 메서드를 사용할 수 있습니다. binarySearch(배열, 찾는값) : 배열 항목중 찾는 값이 있으면 인덱스 값을 리턴 copyOf(원본배열, 복사할길이) : 배열을 복사할 길이만큼 복사해서 배열로 리턴 copyOfRange(원본배열,시작인덱스,끝인덱스) : 배열을 시작인덱스부터 끝인덱스까지 복사해서 배열로 리턴 deepEquals(배열, 배열) : 두 배열의 중첩된 배열 항목까지 비교해서 boolean 리턴 equals(배열, 배열) : 두 배열을 비교 fill(배열, 값) : 배열의 항목에 동일한 값을 저장 fill(배열, 시작인덱스,끝인덱스,값) : 배열의 항목에 시작인덱스부터 끝인..
정규 표현식 [abc] : a,b,c 중 하나의 문자 [^abc] : a,b,c 이외의 하나의 문자 [a-zA-Z] : 알파벳 중 하나의 문자 \d : 한개의 숫자 \s : 공백 \w : 한개의 알파벳 또는 한개의 숫자 ? : 없음 또는 한 개 * : 없음 또는 한 개 이상 + : 한 개 이상 {n} : n개 {n,} : 최소한 n개 {n, m} : n개에서 m개까지 이메일 정규식 \w+@\w+\.\w+(\.\w+)? 예제 import java.util.regex.Pattern; public class PatternEx { public static void main(String[] args) { String regExp = "(010)-\\d{3,4}-\\d{4}"; String data = "010-1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ciA7Oa/btqEeZwMkag/jCsruBknpagKTp71Ek045K/img.png)
바이트 배열을 문자열로 변환 문자열은 본래 바이트(byte/char)의 배열로 되어있습니다. 자바에서는 이를 클래스나 기본 데이터 타입처럼 String 을 다룰 수 있습니다. public class ByteToString { public static void main(String[] args) { byte[] bytes = {72, 101, 108, 108, 111, 32, 74, 97, 118, 97 }; //Hello Java String str1 = new String(bytes); System.out.println(str1); String str2 = new String(bytes, 6, 4);//6번째 인덱스부터 길이가 4만큼 System.out.println(str2); } } 실행 결과 He..
자바 프로그램은 운영체제가 아니라 JVM에서 실행됩니다. 그래서 System 클래스를 통해 운영체제의 일부 기능을 제공하고 있습니다. exit() 프로세스를 강제 종료한는 메소드 입니다. public class ExitEx { public static void main(String[] args) { for(int i = 0; i
Objects Object 클래스와 이름이 유사한 Objects 클래스는 static으로 객체를 다루기 위한 여러가지 메서드들을 지원합니다. 객체 비교 compare() import java.util.Comparator; import java.util.Objects; public class CompareExample { public static void main(String[] args) { Student s1 = new Student(1); Student s2 = new Student(1); Student s3 = new Student(2); int result = Objects.compare(s1, s2, new StudentComparator()); System.out.println(result);..