레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Java인 게시물을 표시합니다. 모든 게시물 표시

2017/01/04

Java에서 Command Line 명령어 실행

Java에서 wkhtmltoimage를 실행시키기 위해 외부 프로그램 실행 샘플 코드를 찾았다.



해당 코드를 활용해서 명령을 실행하고 정상 실행 여부도 확인할 수 있었다.

2016/01/19

Switching easily between Java JDKs on Mac OS X

original URL :
https://wimdeblauwe.wordpress.com/2014/03/20/switching-easily-between-java-jdks-on-mac-os-x/





I just came upon a neat little trick to easily switch what JDK you are using on the command line on Mac OS X (10.9.2 is the version I am using), courtesy of this AskDifferent answer.
First, add the following aliases in ~/.profile file:
alias setJdk6='export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)'
alias setJdk7='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)'
alias setJdk8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'
Open a new terminal window or use source ~/.profile to load the aliases.
Now you can easily switch between the installed JDKs:
> setJdk6
We can verify that Maven picks this up correctly:
> mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: /Applications/maven/apache-maven-3.0.4
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
To go to JDK 7:
> setJdk7
And Maven shows:
> mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: /Applications/maven/apache-maven-3.0.4
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
This works just as well to switch to the just released JDK 8:
> setJdk8
Maven output:
> mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: /Applications/maven/apache-maven-3.0.4
Java version: 1.8.0, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
Voila, simpel and effective!


2014/06/30

Spring - factory method, factory bean 사용

1. 스태틱으로 선언하여 클래스 메서드로 만듦
<bean id="객체ID" class="팩토리클래스" factory-method="생성메서드명">


2. 인스턴스 메서드로 만듦
<beam id="팩토리ID" class="팩토리클래스">
(--> static 메서드가 아니라 객체 먼저 생성 필요)

<bean id="객체ID" factory-bean="팩토리ID" factory-method="생성메서드명">


3. AbstractFactoryBean 상속 받아서 클래스 생성
- 단점 : Spring에서만 사용가능
- 장점 : 팩토리 메서드 지정 불필요. 직접 만들어보면 내부 동작 이해에 도움이 됨.

public class TestFactoryBean extends AbstractFactoryBean<Test> {

    @Override
    public Class<?> getObjectType() {
        ...
    }

    @Override
    protected Tire createInstance() throws Exception {
        ...
    }
...
}

<bean id="객체ID" class="팩토리빈클래스">



Java와 JavaScript의 삼항연산자 다른점 (Ternary Operator in Java, JavaScript)

*JavaScript
var a = 3;
var b = 2;
var max;

max = a > b ?  a : b; - 가능
a > b ? max = a : max = b; - 가능



*Java
int a = 1;
int b = 2;
int max;

max = a > b ?  a : b;         - 가능
a > b ? max = a : max = b;    - 문법 오류 (x)



Spring - Map, Properties 값 설정

*Map과 Properties의 차이
- Map : key나 value로 문자열 및 다른 타입의 객체도 사용 가능
- Properties : Map의 일종이지만, key나 value로 문자열을 다룰 때 주로 사용


*java.util.Properties 타입 :
<props>
<prop key="키1">값1</prop>
<prop key="키2">값2</prop>
...
</props>


*java.util.Map 타입 :
<map>
<entry>
<key>
<value>키1</value>
</key>
<value>값1</value>
</entry>
<entry key="키2">
<ref bean="값2의id"/>
</entry>
<entry key="키3" value="값3" />
<entry key="키4" value-ref="값4의id" />
</map>



Difference between Set, List and Map in Java

Set provides uniqueness guarantee i.e.g you can not store duplicate elements on it, but it's not ordered.
List is an ordered Collection and also allowes duplicates.
Map is based on hashing and stores key and value in an Object called entry. It provides O(1) performance to get object, if you know keys, if there is no collision.

Another key difference between Set, List and Map are that Map doesn't implement Collection interface, while other two does.

Popular impelmentation of Set is HashSet, of List is ArrayList and LinkedList, and of Map are HashMap, Hashtable and ConcurrentHashMap.


-------------------------------------------------------------------
- Set : 중복이 불가해서 고유성은 보장되지만, 순서 유지 불가능
- List : 순서가 유지되고, 중복 가능
- Map : key와 value로 entry라 불리는 Object를 저장하고 찾는다. 키를 알고 있고, 충돌이 없다면, object를 얻는데 performance가 가장 좋다


- Set, List는 Collection 인터페이스를 구현했지만, Map은 아니다.

- 구현체 중 많이 쓰이는것
> Set : HashSet
> List : ArrayList, LinkedList
> Map : HashMap, Hashtable, ConcurrentHashMap.



출처 :
http://javarevisited.blogspot.kr/2011/11/collection-interview-questions-answers.html

2014/06/26

[Spring] Spring web 프로젝트 준비 (Eclipse, Gradle)

*Eclipse Marketplace 플러그인 준비
- groovy -> Groovy/Grails Tool Suite (GGTS) for ... 설치
- gradle -> Gradle Integration for Eclipse ... 설치


*프로젝트 생성 과정
1. New Gradle Project 생성
(Sample project : Java Quickstart)

2. Gradle 설정 파일 (build.gradle) 수정
apply plugin: 'java'
apply plugin: 'eclipse-wtp' // WTP(Web Tools Platform) -> 웹 프로젝트로 인식하도록
apply plugin: 'war'

compileJava.options.encoding = 'UTF-8' // 지정하지 않으면 OS 기본 인코딩으로 간주
sourceCompatibility = 1.7 // 빌드시 해당 버전으로 자바 문법 검사
version = '1.0'

eclipse {
wtp {
facet {
facet name: 'jst.web', version: '3.0' // Servlet Spec Version 지정, 미 지정시 2.4
facet name: 'jst.java', version: '1.7' // Java Version 지정
}
}
}

3. 스프링 라이브러리
www.spring.io > Projects > Spring Framework > Quick Start >
 compile 'org.springframework:spring-context:4.0.5.RELEASE'
를 Gradle 설정파일 dependencies에 복사

4. src 폴더 정리 (4개 폴더 남기고 하위 예제 제거)
src/main/java
src/main/resources
src/test/java
src/test/resources

5. Project> Properties> Java Complier
- Enable project specific settings 체크 해제
  (해당 프로젝트 컴파일러를 별도로 설정하는 옵션)

6. Project> Run As> Gradle Build...
:clean
:cleanEclipse
:eclipse

Run 실행


7. Gradle 프로젝트로 재 설정 (.project 파일)
<nature>org.springsource.ide.eclipse.gradle.core.nature</nature>
- 를 <natures> 태그의 첫번째 항목으로 추가



java.math.BigDecimal 활용 Discount, Tax

public class Calc2 {
  public static void main(String args[]) {
    BigDecimal amount = new BigDecimal("100.05");
    BigDecimal discountPercent = new BigDecimal("0.10");
    BigDecimal discount = amount.multiply(discountPercent);
    discount = discount.setScale(2, RoundingMode.HALF_UP);
    BigDecimal total = amount.subtract(discount);
    total = total.setScale(2, RoundingMode.HALF_UP);
    BigDecimal taxPercent = new BigDecimal("0.05");
    BigDecimal tax = total.multiply(taxPercent);
    tax = tax.setScale(2, RoundingMode.HALF_UP);
    BigDecimal taxedTotal = total.add(tax);
    taxedTotal = taxedTotal.setScale(2, RoundingMode.HALF_UP);
    System.out.println("Subtotal : " + amount);
    System.out.println("Discount : " + discount);
    System.out.println("Total : " + total);
    System.out.println("Tax : " + tax);
    System.out.println("Tax+Total: " + taxedTotal);
  }
}



http://www.yunsobi.com/blog/227