Stream을 사용하면 배열, 컬렉션 클래스 또는 파일에 저장된 데이터들을 같은 방식으로 접근하고 다룰 수 있다. ex) 컬렉션 클래스와 배열을 스트림으로 선언 ArrayList list = new ArrayList(); list.add("전북"); list.add("익산시"); list.add("신동"); list.add("영등동"); list.add("부송동"); Stream stream = list.stream(); //컬렉션 클래스를 스트림으로 선언하는법 //2번째 요소까지만 출력 stream.limit(2).forEach(System.out::println); int[] arr = {1,2,3}; IntStream iStream = Arrays.stream(arr); //배열을 스트림으로 선언하..
람다식은 메서드를 하나의 식(expression)으로 표현한 것.람다식을 '익명 함수'라고도 한다. 람다식의 기본 구문은 다음과 같다. //일반적인 메서드의 형식 int sum(int a, int b){ return a+b; } //람다식을 사용한 경우 (int a, int b) -> { return a+b; }; 메서드 선언부의 메서드명이 없어지고 선언부와 구현부 사이에 화살표 표시가 존재한다. 람다식은 그 자체는 메서드 모습을 하고 있지만 엄밀히 말하면 익명 클래스의 객체와 같다고 볼 수있다. Test t = new Test(){ int sum(int a, int b){ return a+b; } }; 익명 클래스의 객체라는게 위에서 보는 것 처럼 인스턴스 생성 즉시 그 클래스 타입의 멤버를 바로 기술..
제네릭스 - 메서드나 컬렉션클래스에 대해 컴파일시 타입체크를 해주는 기능. 장점 - 컴파일 시 의도하지 않는 타입객체가 저장되는 것을 막으므로 타입안정성 제공 - 타입의 체크와 형변환을 생략할 수 있기 때문에 코드의 간략화 > 제네릭클래스 기본형태 class Student{ private T name; List list = new ArrayList(); public void setName(T name){ this.name=name; list.add(name); } public T getName(){ return this.name; } } 제네릭 클래스를 만드는 방법은 클래스 명옆에 를 붙이고 이 T와 같은 타입을 가지는 곳에 똑같이 T를 써주면 된다. T를 '타입변수'라고 하며, Type의 첫글자를 의미..
익명클래스는 인스턴스 생성시 이름이 없는 클래스이다. 익명 클래스는 클래스, 인터페이스가 그 대상이 된다. 클래스의 선언과 인스턴스 생성을 동시에 하기 때문에 한번만 사용되며, 하나의 객체만을 생성한다는 특징이 있다. 익명클래스 형태 new 조상클래스이름{} new 인터페이스이름{} 이름이 없기 때문에 생성자도 가질 수 없다. 일반적인 클래스와는 달리 상속과 구현을 동시에 할 수 없으며 오로지 하나의 인터페이스를 구현하거나 하나의 클래스를 상속 받을 수 있다.System.out.println(new Layout(){ void test(){ System.out.println(i); } void tests(){ System.out.println(222); } }); 위의 결과는 패키지명,메인클래스이름$1@1..
Thread 쓰레드는 프로세스에 포함되는 자원이다.프로세스란 실행중인 프로그램이며, 프로그램을 실행할 때 필요한 자원이 하나 이상의 쓰레드이다. 하나의 프로세스에 하나의 쓰레드만 있다면 싱글 쓰레드 프로세스라 부르고, 하나의 프로세스에 하나 이상의 쓰레드가 있다면 멀티 쓰레드 프로세스라고 부른다.옛날에 쓰던 DOS환경을 보통 싱글쓰레드, 요즘 쓰는 windows환경을 멀티쓰레드로 이해하면 되겠다. 자바에서 콘솔 프로그램을 짤 때 public staitc void main(String[] args)라는 메서드가 있는데 이것조차도 하나의 쓰레드이다. 아래의 쓰레드 예제는 쓰레드를 생성하는 두가지 방법을 코딩한 것이다.쓰레드를 생성하는 방법은 Runnble인터페이스를 구현하는 방법과 Thread클래스를 상속하..
File newFile = new File(path, fileName); if(!newFile.exists()){ newFile.mkdirs(); newFile.createNewFile(); } 리눅스에서는 파일에 생성에 대한 기본권한이 644 이다. (폴더의 기본 권한은 755) umask 라는 커맨드에서 초기값이 022로 되어있는데..이것을 토대로 폴더(디렉토리)는 777-022 = 755파일은 666-022 = 644파일이 666인 이유는 etc쪽의 설정파일에서 설정 값을 잡고 있는 듯 하다. 644란100의 자리 숫자인 6은 root사용자의 권한을 나타내고10의 자리 숫자인 4는 그룹에 속한 사용자를 나타낸다.그리고 1의 자리 숫자인 4는 그 외의 사용자를 지칭한다. 파일이나 폴더에 대한 허가권으..
clone()은 최고 조상인 Object클래스에 정의된 멤버이다. 이것이 하는 일은 생성된 객체와 똑같은 값을 가지고 있는 복사본의 인스턴스를 생성하는 일을한다.변경되기 전의 값을 참고해야할 때 또는 원래의 값으로 돌려 넣고 싶을 때 이용하면 도움이 될 것이다. 이 clone()를 객체를 상대로 사용하기 위해서는 해당 객체에 Cloneable이라고 하는 인터페이스 구현체를 implements 해줘야한다.그리고 해당 clone()를 오버라이딩 해 해당 객체를 복사하는 코드를 기술해야 한다. clone()은 구현되는 사용자 클래스의 객체멤버에 대한 완전한 값복사를 지원하지 않는다. 참조복사라고하고 얕은복사라고도 하는 주소복사가 이뤄지기 때문에 복사본의 객체에 참조형 멤버변수가 존재한다면 그 값의 변경이 원본..
자바 7 (Diamond)지시자 제네릭스를 사용할 때 기존의 list1변수처럼 인스턴스 생성을 해왔지만, 자바7 부터는 지시자로 new연산자 부분을 함축할 수 있게 되었다. 자바7 부터는 정수형․실수형 리터럴에 _구분자를 넣을 수 있게 되어 숫자를 구분하기가 수월해졌다. switch문의 인자로 String타입의 값을 사용할 수 있게 되었다. try~catch문의 catch문에서 익셉션타입을 여러개 정의 할 수 있게 되었다. 기존에 파일 입출력을 사용하기 위해서는 자원을 가져다 쓰고 나면 finally부분에서 자원을 해제해줘야만 했다. 자바 7부터는 위와 같은 표현이 가능하다 try키워드문의 인자에 자원을 할당하는 코드를 생성하면 자원해제는 자동으로 관리해준다. try블록에 존재하는 기능이 한번에 자동으로..
Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 import java.util.*; public class MapOrder implements Comparator{ private List mapList; private ArrayList treeList; private..
열거형이란 의미상 관련이 있는 상수값들의 집합을 의미한다. 어떤 클래스에 상수로 정의된 변수가 있다고 했을 때, 그 상수의 변경으로 인해서 상수를 참조하는 다른 특정 클래스들도 모두 컴파일을 해야 적용이 되었는데, 상수 대신 열거형을 사용하면 컴파일 하지 않아도 된다. 열거형을 정의 하는 방법은 간단하다. enum 열거형이름 { 열거형상수명1, 열거형상수명2, ....... } enum Military { ARMY, NAVY, AIRFORCE } 열거형의 상수에 접근하는 방법은 간단하다. 마치 클래스의 static멤버의 접근방법과 같은 방법을 취한다.열거형이름.상수명Military.ARMY 모든 열거형은 java.lang.Enum클래스를 조상으로 한다.이 Enum클래스에는 몇가지 메서드가 정의되어 있다...
HashSet은 - Set인터페이스가 구현하고 있는 대표적인 클래스 - 데이터의 저장순서를 유지하지 않고, 데이터 중복을 허용하지 않는다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.util.*; public class HashSetEx1 { public static void main(String[] args){ HashSet set = new HashSet(); Object[] obj = {"1",new Integer(1),5,8,2,4,10,2,"4","6","8","10"}; for(int i =0; i
Collection은 다수의 데이터를 쉽게 처리 하도록 표준화된 방법을 제공하는 클래스들을 지칭한다. Collection인터페이스 Map ↗ ↖ List인터페이스 Set인터페이스 List와 Set인터페이스를 공통부분을 추출해서 Collection인터페이스를 정의하였다. Map은 다른 두 인터페이스와 달리 두 가지의 데이터를 다루기 때문에 같은 계층에 포함되지 못하였다. 컬렉션 클래스 List - 저장 순서를 유지하고, 데이터 중복 허용 종류 : ArrayList, LinkedList, stack Set - 저장 순서를 유지하지 않고, 중복도 허용하지 않음. 종류 : HashSet, TreeSet Map - (키, 값)의 형태로 저장되어 저장 순서를 유지하지 않고 값만 중복 허용 종류 : HashMap, ..
예외처리는 프로그램 실행도중 예외가 발생 하였을 때 프로그램의 비정상적 종료를 막기 위해 적절한 처리를 해주는 것입니다. 에러는 컴파일에러와 런타임에러로 나뉩니다. 컴파일 에러는 말 그대로 프로그램의 컴파일시 나는 에러이고런타임 에러는 프로그램의 실행도중에 발생하는 에러입니다. 모든 예외 클래스들의 조상은 Exception클래스입니다.Exception클래스의 조상은 Throwable이구요Throwable의 조상은 최고 조상인 Object입니다. Exception클래스들의 자손은 checked예외와 unchecked예외가 있습니다.Exception클래스의 RuntimeException과 그 자손들만이 unchecked예외이고그 외 나머지 Exception클래스의 자손은 checked예외입니다. 자바 api..
2진수는 1과 0으로 이루어진 수이다. 10진수는 0~9까지의 수이다. 8진수는 0~7까지의 수이다. 16진수는 0~9 A~F까지의 수이다. 단일로 나타낼 수 있는 값이 0부터 9까지이기 때문에 문자로 대체된다. n진수의 10진수로의 변환 임의의 진수를 10진수로 변환하는 방법은 쉽다. 맨 우측의 가장 작은 값을 시작으로 해서 인덱스(n)를 0으로 잡는다고 하자 만약 1100이라는 이진수가 있다면 맨마지막 값(오른쪽 첫번째)인 0의 n값은 0이고, 그 다음에 위치하는 0의 n값은 1이다. 이렇게 차례대로 2, 3......를 가지게 될 것이다. 이제 각 자리는 2진수이기 때문에 (2ⁿ x 자리값)으로 계산해서 처리해주고, 다시 그 값들을 전부 더해주면 된다. 그렇기 때문에 최종적으로 계산형태는 (1 x ..