Java8에서는 IntStream을 이용해서 fancy하게 Random 한 숫자를 원소로 가지는 Array를 만들수 있다. 아래는 1 ~ 100 까지 500개의 원소를 갖는 Array를 만드는 코드이다. Random r = new Random(); int[] ints = r.ints(500, 1, 101).toArray(); for (int anInt : ints) { System.out.println(anInt); } //리스트 List intsList = r.ints(500, 1, 101) .boxed().collect(Collectors.toList());
자바에서 문자열 작업을 할때 사용할 수 있는 MessageFormat이라는 클래스가 있다. 특히 Template 문서에 동적으로 특정한 값들을 삽입할 때 이용하면 가독성을 높일 수 있다. 그리고 날짜나 숫자 형식을 제공하기 때문에 유용하다. 그럼 몇 가지 예제로 사용법을 알아 보겠다. 1. 가변인자를 이용한 문자열 삽입 String text = MessageFormat.format("My name is {0}", "무명소졸"); System.out.println(text); //OUTPUT //My name is 무명소졸 간단한 문자열에서는 오히려 불필요한 클래스 사용지 복잡해 보일지 모르겠다. 하지만 아래처럼 연결할 동적 문자열이 많을 경우 MesageFormat을 사용하면 코드 가독성을 높일 수 있다..

Run() VS Start() 쓰레드의 Run 메서드와 Start메서드 둘 다 뭔가를 실행 시키는 느낌의 단어이기 때문에 했갈린다. 쓰레드를 이용한 코딩을 자주 하지 않는 입장에서 혼란스럽기도 하고 차이점을 잘 잊어 버려서 한번 정리하려고 한다. Start() 메서드를 사용해라. Run()을 사용하면 안된다. 결론부터 말하면 그렇다. 인텔리J와 같은 IDE에서는 아래 그림처럼 Suggestions 을 해 주기도 한다. 아래는 2초 간격으로 1부터 10까지 숫자를 출력하는 쓰레드를 Run으로 실행하는 코드이다. Run메서드를 실행해도 결과는 잘 나온다. Output 위와 같이 결과가 잘 출력되는데 무엇이 문제인가? 이번에는 t.run()라인 밑에 출력문을 추가해서 다시 실행 해보겠다. Output 1부터 ..
객체지향의 요소중에 정보은닉이 있습니다.자바도 객체 지향언어이 때문에 정보은닉을 위한 멤버 필드나,메서드의 외부 노출을 대한 범위를 정할 수 있는아래 표와 같은 4가지 접근 제어자를 제공합니다. 접근 제어자 클래스 패키지 상속 패키지 외부 Private Y N N N Default Y Y N N Protected Y Y Y N Public Y Y Y Y 1.Privateprivate 은 멤버필드 나 메서들의 접근 범위를 클래스 내부로 제한합니다. 또한 클래스나 인터페이스는 private일 수 없고인터페이스에 선언된 메서드 나 필드 역시 private 일 수 없습니다. Person.java123456789101112package info.m2sj; public class Person { private St..
추상클래스 와 인터페이스는 언제 사용하면 될까요? 추상클래스, 인터페이스는 혼자서는 인스턴스화 될 수 없으면 자바에서 상속을 위해 사용할 수 있는 기법입니다.그럼 언제 추상클래스를 사용하고 인터페이스를 사용할까요?자바8+ 이상부터는 인터페이스의 큰 변화가 생겼지만 (java 8 interface change) 여기서는 논외로 두겠습니다.우선 추상 클래스 와 인터페이스의 스펙상 차이점을 알아보겠습니다. 추상클래스단일 상속추상 메서드와 구현 메서드 두 가지 모두를 가질 수 있음접근제어자 public,private,protected 메서드,변수를 가질 수 있음 인터페이스다중 상속메서드 바디를 가질 수 없음접근제어자는 public 메서드 만 가능 (접근제어자 생략시 default 값이 public), 클래스(s..
클래스(static) 메서드는 언제 정의 할까요?자바에서 class 를 만들 때 흔히 말하는 static 메서드는 혹은 클래스 메서드는 언제 정의해서 사용하면 될까요?우선 인스턴스 메서드와 클래스 메서드와의 구조적 차이점을 알아 보겠습니다. - 인스턴스 메서드 인스턴스에 속해 있습니다. 클래스에 의해 생성된 모든 객체들을 인스턴스라고 합니다. 즉 인스턴스 메서드를 사용하기 위해서는 객체를 생성해야 됩니다.- 클래스 메서드 Class 에 속해 있습니다. 인스턴스 생성없이 클래스참조만으로 사용할수 있습니다. 그렇다면 클래스 메서드는 언제 만들면 될까요?소나타라는 자동차가 있습니다. 길에 나가 보면 소나타가 한두 대가 아니죠, 내 친구 차도 소나타고 윗집 아저씨의 차도 소나타입니다.각각의 소나타 차량들을 객체..
Google 이란 이름은 무한 신뢰하게 됩니다. ^^;Guava 는 그러한 Google 에서 만든 오픈소스 라이브러리입니다. (과일을 이야기 하는 것이 아닙니다.ㅎㅎ)가독성 있는 코드를 작성하기 위한 많은 유틸 클래스를 제공합니다.이하 Guava 를 이용한 간단한 샘플 코드입니다. 추후 계속 업데이트할 예정입니다. Test Guava Version 12345 com.google.guava guava 12.0.1cs 1.문자열 length 기준으로 split 하기12345678String fruits = "사과딸기레몬포도";Iterable split = Splitter.fixedLength(2).split(fruits); //2자 단위로 split Iterator iterator = split.iterat..
며칠 포스팅을 못했네요. 무언가를 꾸준히 한다는 건 참 어려운 일 같습니다.오늘은 간단히 List 에서 현재 요소의 앞에 요소에 접근할 때 graceful 하게 할 수 있는 방법입니다. 가독성에 중점을 둔 부분입니다. 1.for 문12345678910111213141516171819202122import java.util.ArrayList;import java.util.List; public class ListTest { public static void main(String[] args) { List animals = new ArrayList(); animals.add("cat"); animals.add("dog"); animals.add("mouse"); animals.add("tiger"); ani..
"자바에서 항상 Call By Value 입니다." 결론부터 말하자면 그렇습니다.자바에서 값을 전달할 때 Call By Value 인지 Call By Reference 인지는 수많은 커뮤니티, 블로그에서 이야기 돼온 해묵은 주제입니다.이번 포스팅에서는 복잡하고 아리송한 이야기는 빼고 자바는 왜 Call By Value 이고 어떻게 동작하는지에 대해서 이야기해보겠습니다.그럼 이하 예제 소스로 확인해보겠습니다. Person.java1234567891011121314151617package info.m2sj.pass; public class Person { private String name; public Person(String name) { this.name = name; } @Override public..
자바에서 디렉토리 삭제시 하위디렉토리들이 파일이 존재할 경우에는 재귀적으로 삭제 처리할수밖에 없습니다.(단 Runtime으로 native 명령어를 직접 실행해서 삭제할수 있습니다. 하지만 보안적 위협이 됩니다.) Java8 에서는 NIO2 와 Stream API 를 사용해서 Beautiful 하게 삭제처리를 할수 있습니다.123456789101112131415161718192021222324package com.example.demo; import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.util.Comparat..
- Total
- Today
- Yesterday