달력

42024  이전 다음

  • 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
프로그래밍/JAVA 2016. 9. 23. 10:19


자바 기본 API는 여러 절로 구성되어 있습니다.



Intro

Object Class

Objects Class

System Class

Class Class

String Class

StringTokenizer, StringBuffer, StringBuilder Class

Regular Expression & Pattern Class

Arrays Class

Wrapper Class

Math, Random Class

Date, Calendar Class

Format Class

java.time Package




Class Class

 자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리합니다. 여기서 메타 데이터는 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보를 말합니다.


 Class 객체 얻기(getClass(), forName())

  프로그램에서 Class 객체를 얻기 위해서는 Object 클래스가 가지고 있는 getClass() 메소드를 이용하면 됩니다. Object는 모든 클래스의 최상위 클래스이므로 모든 클래스에서 getClass() 메소드를 호출할 수 있습니다.


1
2
Class clasis = obj.getClass();
 
cs



  getClass() 메소드는 해당 클래스로 객체를 생성했을 때만 사용할 수 있는데, 객체를 생성하기 전에 직접 Class 객체를 얻을 수도 있습니다. Class는 생성자를 감추고 있기 때문에 new 연산자로 객체를 만들 수 없고, 정적 메소드인 forName()을 이용해야 합니다. forName() 메소드는 클래스 전체 이름(패키지가 포함된 이름)을 파라미터로 받고 Class 객체를 리턴합니다.


1
2
3
4
5
try {
    Class clasis = Class.forName(String className);
catch( ClassNotFoundException e ) {
 
}
cs



  Class.forName() 메소드는 파라미터로 주어진 클래스를 찾지 못하면 ClassNotFoundException 예외를 발생시키기 때문에 예외 처리가 필요합니다. 다음은 두 가지 방법으로 Car 클래스의 Class 객체를 얻고, Class의 메소드를 이용해 클래스의 전체 이름과 간단한 이름 그리고 패키지 이름을 얻어 출력합니다.


 * ClassExam.java


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
package api;
 
 
public class ClassExam {
    public static void main(String[] args) {
        Car car = new Car();
        Class<extends Car> clasis1 = car.getClass();
        System.out.println(clasis1.getName());
        System.out.println(clasis1.getSimpleName());
        System.out.println(clasis1.getPackage().getName());
        System.out.println();
        try {
            Class<?> clasis2 = Class.forName("api.Car");
            
            System.out.println(clasis2.getName());
            System.out.println(clasis2.getSimpleName());
            System.out.println(clasis2.getPackage().getName());
        } catch(ClassNotFoundException e) {}
    }
}
 
class Car {
    
}
 
 
 
cs



 





 리플렉션 

  Class 객체를 이용하면 클래스의 생성자, 필드, 메소드 정보를 알아낼 수 있습니다. 이것을 리플렉션(Reflection)이라고 합니다. Class 객체는 리플렉션을 위해 getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods() 를 제공하고 있습니다.


1
2
3
4
Constructor[] constructors = clasis.getDeclaredConstructors();
Field[] fields = clasis.getDeclaredFields();
Method[] methods = clasis.getDeclaredMethods();
 
cs



  Constructor, Field, Method 클래스는 모두 java.lang.reflect 패키지에 속해 있습니다. getDeclaredFields()와 getDeclaredMethods()는 클래스에 선언된 멤버만 가져오고 상속된 멤버는 가져오지 않습니다. 


  다음은 Car 클래스에서 선언된 생성자, 필드, 메소드의 정보를 얻고 출력합니다.


 * ReflectExam.java


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
package api;
 
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
public class ReflectExam {
    public static void main(String[] args) throws Exception {
        Class<?> clasis = Class.forName("api.Car");
        
        System.out.println("[클래스 이름]");
        System.out.println(clasis.getName());
        System.out.println();
        
        System.out.println("[생성자 정보]");
        Constructor<?>[] constructors = clasis.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.print(constructor.getName() + "(");
            Class<?>[] parameters = constructor.getParameterTypes();
            printParameters(parameters);
            System.out.println(")");
        }
        System.out.println();
        
        System.out.println("[필드 정보]");
        Field[] fields = clasis.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.getType().getSimpleName() + " " + field.getName());
        }
        System.out.println();
        
        System.out.println("[메소드 정보]");
        Method[] methods = clasis.getDeclaredMethods();
        for (Method method : methods) {
            System.out.print(method.getName() + "(");
            Class<?>[] parameters = method.getParameterTypes();
            printParameters(parameters);
            System.out.println(")");
        }
    }
    
    private static void printParameters(Class<?>[] parameters) {
        for (int i = 0; i < parameters.length; i++) {
            System.out.print(parameters[i].getName());
            if (i < (parameters.length - 1)) {
                System.out.print(", ");
            }
        }
    }
}
 
 
 
 
cs





  실행 결과는 Car 클래스가 자체적으로 가지고 있는 public 멤버와 상위 클래스인 Object가 가지고 있는 public 멤버들이 모두 출력되고, private 멤버들은 출력되지 않는 것을 볼 수 있습니다.






 동적 객체 생성(newInstance())

  Class 객체를 이용하면 new 연산자를 사용하지 않고도 동적으로 객체를 생성할 수 있습니다. 이 방법은 코드 작성 시에 클래스 이름을 결정할 수 없고, 런타임 시에 클래스 이름이 결정되는 경우에 매우 유용하게 사용될 수 있습니다. 


  다음 코드처럼 Class.forName() 메소드로 Class 객체를 얻은 다음 newInstance() 메소드를 호출하면 Object 타임의 객체를 얻을 수 있습니다.


1
2
3
4
5
6
7
8
try {
    Class clasis = Class.forName("런타임 시 결정되는 클래스 이름");
    Object obj = new clasis.newInstance();
catch (ClassNotFoundException e) {
catch (InstantiationException e) {
catch (IllegalAccessException e) {
}
 
cs



  newInstance() 메소드는 기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본 생성자가 존재해야 합니다. 만약 매개 변수가 있는 생성자를 호출하고 싶다면 리플렉션으로 Constructor 객체를 얻어 newInstance() 메소드를 호출하면 됩니다. newInstance() 메소드는 두 가지 예외가 발생할 수 있는데, InstantiationException 예외는 해당 클래스가 추상 클래스이거나 인터페이스일 경우에 발생하고, IllegalAccessException 예외는 클래스나 생성자가 접근 제한자로 인해 접근할 수 없는 경우에 발생합니다. 


  newInstance() 메소드의 리턴 타입은 Object 이므로 이것을 원래 클래스  타입으로 변환해야만 메소드를 사용할 수 있습니다. 그렇게 하기 위해서는 강제 타입 변환을 해야 하는데, 클래스 타입을 모르는 상태이므로 변환을 할 수가 없습니다. 이 문제를 해결하기 위해 인터페이스 사용이 필요합니다. 예를 들어 Action 인터페이스와 구현 클래스인 SendAction, ReceiveAction 이 있다고 가정해 봅시다.






  Class.forName() 메소드의 파라미터로 "SendAction" 또는 "ReceiveAction"을 주면 Class 객체가 만들어지고, Class 객체의 newInstance() 메소드로 Object 객체를 얻을 수 있습니다. 얻어진 객체는 모두 Action 인터페이스를 구현하고 있기 때문에 다음과 같이 Action 인터페이스 타입으로 변환이 가능합니다. 그런 다음, Action 인터페이스의 execute() 메소드를 호출하면, 개별 클래스의 실체 메소드인 execute() 메소드가 실행됩니다.


1
2
3
4
class clasis = Class.forName("SendAction");
Action action = (Action) clasis.newInstance();
action.execute();
 
cs



  Class.forName() 메소드의 파라미터로 "SendAction"을 줘서 SendAction의 execute가 호출됩니다. 다음 예제를 작성해서 직접 확인해 봅시다.


 * Action.java


1
2
3
4
5
6
7
8
9
package api;
 
 
public interface Action {
    public void execute();
}
 
 
 
cs



 * SendAction.java


1
2
3
4
5
6
7
8
9
10
11
package api;
 
 
public class SendAction implements Action{
    public void execute() {
        System.out.println("데이터 전송");
    }
}
 
 
 
cs




 * NewInstanceExam.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package api;
 
 
public class NewInstanceExam {
    public static void main(String[] args) {
        try {
            Class<?> clasis = Class.forName("api.SendAction");
            Action action = (Action) clasis.newInstance();
            action.execute();
        } catch (Exception e) { e.printStackTrace(); }
    }
}
 
 
 
cs








end

출처 : http://palpit.tistory.com/875

'프로그래밍 > JAVA' 카테고리의 다른 글

Implementation (impl) 을 만들때 @Override 를 붙여야하는 이유  (0) 2016.09.23
Forward와 Include의 차이점  (0) 2016.09.23
Spring - Ioc & DI  (0) 2016.09.23
StringUtils  (0) 2016.09.23
Java Collection Framework (JCF)  (0) 2016.09.23
Posted by 당구치는 개발자
|
프로그래밍/JAVA 2016. 9. 23. 10:18


Implementation (impl) 을 만들때 @Override 를 붙여야하는 이유

http://nestofeagle.egloos.com/1805492

얼마전에 우연하게 IDE(이클립스) 기능을 사용하다가 발견한 의문점에 대한 해답이다

서비스 로직을 만들기 위하여 인터페이스 (interface) 를 작성하고

pubblic interface programService {
public List getProgramList() {
}
}

해당 소스를 작성하고 impl 에다가 자동완성 기능을 사용하기 위해서 getProgramList() 를 자동완성 시켰는데

public class programServiceImpl implements programService {
@Override
public List getProgramList() {
// 자동완성 
}
}

응? 왜 @Override 가 생겼지? 의문점이 생겼다

물론 생겨도 코드를 작동시키는데 아무런 문제가 없고, 이 @Override 문을 삭제하여도 아무런 문제가 없다

그런데 어째서..이런 의미없는 코드를 IDE에서 지원해 주었을까 의문이 생겨 우리들의 신 구글님께 질문해보았다





스택오버플로우 사이트의 답변을 종합하면 이렇다
  1. 당신이 작성한 것은 추상화 ( interface ) 클래스이다
  2. 추후에 당신이 추상화 클래스를 변경하거나 메소드를 삭제할 경우
  3. 당신에게 impl 의 소스가 연결되어 있어 당신이 이것도 같이 수정해야한다고 알려줄 수 있다는 것이다
  4. 즉 이것은 미묘하게 발생할 수 있는 버그를 컴파일러 단계에서 알아차리게 해준다
가장 중요한 것이다 [ 미묘하게 발생할 수 있는 버그를 컴파일러 단계에서 수정할 수 있도록 도와준다 ] 

출처 : http://egloos.zum.com/nestofeagle/v/1805492


'프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 자바 기본 API - Class Class  (0) 2016.09.23
Forward와 Include의 차이점  (0) 2016.09.23
Spring - Ioc & DI  (0) 2016.09.23
StringUtils  (0) 2016.09.23
Java Collection Framework (JCF)  (0) 2016.09.23
Posted by 당구치는 개발자
|
프로그래밍/JAVA 2016. 9. 23. 10:16



Forward vs Include

 

[참고 출처: core Servlet and Java Server Pages]

 

@ 주의 사항

1. jsp에서 사용하는  "Include Directive"인 <%@ include file="경로"%>과 구분해야한다.

2. 여기서 설명하는 Include는 RequestDispatcher를 사용하는 include로 스크립트로 표현하면

    <jsp:include page="경로"/>이고 Action Tag 에 속한다


@ 참고 사항

Forward를 스크립트로 표현하면 <jsp:forward page="경로"/>  : Action Tag에 속한다.

Include 를 스크립트로 표현하면 <jsp:include page="경로"/>  : Action Tag에 속한다.

                 

Forward와 Include 의 공통점


1. 요청 전달에 사용된다.

2. RequestDispatcher 를 사용한다. (<--- 이게 요청전달이라고 보면 되지만 ㅎㅎㅎ)

   ex> String url = "/path/test1.jsp?id=xxx&pw=xxx";

          RequestDispatcher rd = request.getRequestDispatcher (responseURL);

          rd.메소드명 (request, response);

3. 전달될 page에 객체를 전달할 수 있다. (RequestDispatcher 를 사용하니 당연하지!)



Forward와 Include 의 차이점

참! 말로 설명하기 힘들겠네요. ㅎㅎㅎ


공통점에서 말했듯이 요청 전달방식은 동일합니다 여기서 동일하다는 것은 클라이언트가 처음 요청한 request를 전달해서 유지한다는 점에서 동일하다고 한 겁니다.

하지만 request 제어권에서 차이가 있습니다.


Forward의 경우는 url1에서 forwar해서 url2로 전달하게 되면 제어권을 다시 url1으로 전달받지 못합니다. 따라서 url1에서 처리한 결과 화면이 전혀 보이지 않고 최종 클라이언트 브라우저에는 url2에서 처리한 화면만이 보여지게 됩니다.


Include의 경우는 url1에서 include를 하면 url2로 제어권을 잠시 빌려주고 처리를 다 하면 다시 url1으로 제어권을 반납한다. 따라서 클라이언트화면에서는 url1의 내용속에 url2가 들어가서 보여진다.

그래서 이름이 'Include'다. ^^


출처 : http://siasi.tistory.com/entry/Forward-%EC%99%80-Include-%EA%B3%B5%ED%86%B5%EC%A0%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90

'프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 자바 기본 API - Class Class  (0) 2016.09.23
Implementation (impl) 을 만들때 @Override 를 붙여야하는 이유  (0) 2016.09.23
Spring - Ioc & DI  (0) 2016.09.23
StringUtils  (0) 2016.09.23
Java Collection Framework (JCF)  (0) 2016.09.23
Posted by 당구치는 개발자
|
프로그래밍/JAVA 2016. 9. 23. 10:04




IoC(Inversion of Control - 제어의 역전)란?

IoC란 간단하게 말하여 프로그램의 제어 흐름 구조가 바뀌는 것이다.

일반적으로, main() 같은 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정, 생성하고, 만들어진 오브젝트 내의 메소드를 호출하는 작업을 반복한다. 이런 구조에서 각 오브젝트느 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로 참여한다.

즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다.

 

이에 반하여 IoC는 제어 흐름의 개념을 거꾸로 뒤집는다. 오브젝트는 자신이 사용할 오브젝트를 스스로 생성하거나 선택하지 않는다. 그리고 자신이 어떻게 만들어지고 어디서 사용되는지 알 수 없다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하는 것이다. 프로그램의 시작을 담당하는 main()같은 엔트리 포인트를 제외하면 모든 오브젝트는 이런 방식으로 위임받은 제어 권한을 갖는 특별한 오브젝트에 의해 결정되고 만들어지는 것이다.

 

위의 내용을 토대로 IoC를 요약하여 말하자면 아래와 같이 정의할 수 있다.

- 작업을 수행하는 쪽에서 Object 를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는다.
- IoC 에서는 Object 가 자신이 사용할 Object 를 생성하거나 선택하지 않는다.
- 또한 Object 는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없다.
- 모든 Object 는 제어 권한을 위임받는 특별한 Object 에 의해서 만들어 지고 사용된다. 

 

 

IoC 구현 방법

  • DL (Dependency Lookup)  - 의존성 검색
            저장소에 저장되어 있는 빈(Bean)에 접근하기 위하여 개발자들이 컨테이너에서 
    제공하는 API 를 이용하여 
            사용하고자 하는 빈(Bean) 을 Lookup 하는 것
  • DI (Dependency Injection) - 의존성 주입
            각 계층 사이, 각 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는것
            각 클래스 사이의 의존 관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것
            DL 사용 시 컨테이너 종속성이 증가하여, 이를 줄이기 위하여 DI를 사용
        Setter Injection - 인자가 없는 생성자나 인자가 없는 static factory 메소드가 bean을 인스턴스화 하기 위하여 
                              호출된 후 bean의 setter 메소드를 호출하여 실체화하는 방법
                              - 객체를 생성 후 의존성 삽입 방식이기에 구현시에 좀더 유연하게 사용할 수 있다.
                              - 세터를 통하여 필요한 값이 할당되기 전까지 객체를 사용할 수 없다.
                              - Spring 프레임워크의 빈 설정 파일에서 property 사용
  • public class SimpleMovieister{

    private MovieFinder movieFinder;  

    public void setMovieFinder(MovieFinder movieFinder){

    this.movieFinder = movieFinder;

    }

    }


        Constructor Injection - 생성자를 이용하여 클래스 사이의 의존 관계를 연결
                              - 생성자에 파라미터를 지정함으로 생성하고자하는 객체가 필요로 하는 것을 명확하게 알 수 있다.
                              - Setter메소드를 제공하지 않음으로 간단하게 필드를 불변 값으로 지정이 가능하다.
                              - 생성자의 파라미터가 많을 경우 코드가 복잡해 보일 수 있다.
                              - 조립기 입장에서는 생성의 순서를 지켜야 하기에 상당히 불편하다.
                              - Spring 프레임워크의 빈 설정 파일에서 constructor-arg 사용

    public class SimpleMovieister{

    private MovieFinder movieFinder;

    public SimpleMovieLister(MovieFinder movieFinder){

    this.movieFinder = movieFinder;

    }

    }

     

        Method Injection - Singleton 인스턴스와 Non Singleton 인스턴스의 의존 관계를 연결 시킬 필요가 있을 
                              경우 사용하지만, 많이 사용하지는 않는다.

     

     

    의존성 주입(DI)의 간단한 예제

     

    Setter Injection의 예제

    <bean id="exampleBean" class="examples.ExampleBean">
        <property name="beanOne"><ref bean="anotherExampleBean"/></property>
        <!-- setter injection using the neater 'ref' attribute -->
        <property name="beanTwo" ref="yetAnotherBean"/>
        <property name="integerProperty" value="1"/>
    </bean>

    <bean id="anotherExampleBean" class="examples.AnotherBean"/>
    <bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

     

    public class ExampleBean {
        private AnotherBean beanOne;
        private YetAnotherBean beanTwo;
        private int i;

        public void setBeanOne(AnotherBean beanOne)
            this.beanOne = beanOne;

        public void setBeanTwo(YetAnotherBean beanTwo)
            this.beanTwo = beanTwo;

        public void setIntegerProperty(int i)
            this.i = i;
    }

     

     

    Constructor Injection의 예제

    <bean id="exampleBean" class="examples.ExampleBean">
        <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg>
        <constructor-arg ref="yetAnotherBean"/>    
               // <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg> 위와 동일
        <constructor-arg type="int" value="1"/>
    </bean>

    <bean id="anotherExampleBean" class="examples.AnotherBean"/>
    <bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

     

    public class ExampleBean {
        private AnotherBean beanOne;
        private YetAnotherBean beanTwo;
        private int i;
        
        public ExampleBean(
            AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) {
            this.beanOne = anotherBean;
            this.beanTwo = yetAnotherBean;
            this.i = i;
        }
    }

     

     

    IoC 용어 정리

    bean - 스프링에서 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트

    자바빈, EJB 빈과 비슷한 오브젝트 단위의 애플리케이션 컴포넌트를 말한다하지만 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 빈은아니다스프링의 빈은 스프링 컨테이너가 생성과 관계설정사용등을 제어해주는 오브젝트를 가리킨다.


    bean factory - 스프링의 IoC 담당하는 핵심 컨테이너

    빈을 등록/생성/조회/반환/관리한다보통은 bean factory  바로 사용하지 않고 이를 확장한 application context  이용한다. BeanFactory  bean factory  구현하는 interface 이다. (getBean()등의 메소드가 정의되어 있음)

     

    application context - bean factory 확장한 IoC 컨테이너

    빈의 등록/생성/조회/반환/관리의 기능은 bean factory  같지만여기에 spring 각종 부가 서비스를 추가로 제공한다. ApplicationContext application context 구현해야 하는 interface이여, BeanFactory  상속한다.

     

    configuration metadata (설정정보/설정 메타정보)

    application context 혹은 bean factory  IoC 적용하기 위해 사용하는 메타정보

    스프링의 설정정보는 컨테이너에 어떤 기능을 세팅하거나 조정하는 경우에도 사용하지만 주로 bean  생성/구성하는 용도로 사용된다.

     

    container (IoC container)

    IoC 방식으로 bean 관리한다는 의미에서 bean factory  application context  가리킨다
    (spring container = application context) 
    application context
      자체로 ApplicationContext 인터페이스를 구현한 오브젝트를 가리키기도 하는데,하나의 애플리케이션에 보통 여러개의 ApplicationContext Object 만들어진다이를 통칭해서 strping container라고 부를  있다.

    간단하게, 객체를 관리하는 컨테이너이다, 컨테이너에 객체를 담아 두고, 필요할 때에 컨테이너로부터 객체를 가져와 사용할 수 있도록 하고 있다.

     

    spring framework - IoC container, application context  포함해서 spring 제공하는 모든 기능을 통칭한다.

     

     

    클래스 호출방식

    일반적인 클래스 호출

    클래스내에 선언과 구현이 한몸이기때문에 다양한 형태로 변화가 불가능하다.

     

    인터페이스를 이용한 클래스 호출

    클래스를 인터페이스와 구현클래스로 분리를 하였다.
    구현클래스 교체가 용이하여 다양한 형태로 변화가 가능
    하지만 구현클래스 교체시 호출 클래스의 소스를 수정해야한다.

     

    팩토리패턴을 이용한 클래스 호출방식

    팩토리방식은 팩토리가 구현클래스를 생성하므로 클래스는 팩토리를 호출하는 코드로 충분하다.
    구현클래스 변경시 호출클래스에는 영향을 미치지 않고, 팩토리만 수정하면 된다.

    하지만 클래스에 팩토리를 호출하는 소스가 들어가야한다. 그것 자체가 팩토리에 의존함을 의미한다

     

    IoC를 이용한 클래스 호출 방식

    팩토리패턴의 장점을 더하여 어떠한것에도 의존하지 않는 형태로 구성이 가능하다.
    실행 시점에 클래스간의 관계가 형성이 된다. 
    즉 의존성이 삽입된다는 의미로 IoC를 DI(Dependency Injection) 라는 표현으로 사용한다.

     

     

    참조목록

    http://openframework.or.kr/framework_reference/spring/ver2.x/html/beans.html
    http://lefthand29.blogspot.com/2012/02/ioc-inversion-of-control-spring-ioc_22.html#!/2012/02/ioc-inversion-of-control-spring-ioc_22.html

    http://blog.daum.net/kitepc/557
    http://www.javajigi.net/pages/viewpage.action?pageId=5614#SpringIoC%EA%B0%9C%EB%85%90%EB%B0%8F%ED%99%9C%EC%9A%A9%EB%B0%A9%EC%95%88-1.IoC%EC%9D%98%EA%B0%9C%EB%85%90
    http://code.google.com/p/developerhaus/wiki/TobySpring_10#10.2_IoC/DI를_위한_빈_설정_메타정보_작성

    http://trypsr.springnote.com/pages/251122


    출처 : http://isstory83.tistory.com/91



    '프로그래밍 > JAVA' 카테고리의 다른 글

    Implementation (impl) 을 만들때 @Override 를 붙여야하는 이유  (0) 2016.09.23
    Forward와 Include의 차이점  (0) 2016.09.23
    StringUtils  (0) 2016.09.23
    Java Collection Framework (JCF)  (0) 2016.09.23
    디자인 패턴  (0) 2016.09.23
    Posted by 당구치는 개발자
    |
    프로그래밍/JAVA 2016. 9. 23. 10:02


    StringUtils

    □ 정의
    - org.apache.commons.lang.StringUtils.
    - 자바의 String 클래스가 제공하는 문자열 관련 기능을 강화한 클래스.

    □ 특징
    - StringUtils 클래스만으로 거의 대부분의 문자열 처리를 수행.
    - 파라미터 값으로 null을 주더라도 절대 NullPointException을 발생시키지 않음. 
    (null이 입력되는 경우, 메소드에 따라 알맞은 결과를 리턴.)

    □ API
    http://commons.apache.org/lang/api-release/index.html

    □ 예제
    - 주요 method 테스트.

    /* StringUtilsTest.java */

    package com.chocolleto.board.user;

    import org.apache.commons.lang.StringUtils;

    public class StringUtilsTest {

    public static void main(String[] args) {

    String str;
    String str1;
    Boolean bool;

    str = "hello java.";
    // str이 java를 포함하고 있으면 true 반환.
    bool = StringUtils.contains(str, "java");
    System.out.println("contains : " + bool);

    // str이 null이면 "", 아니면 str 반환.
    str1 = StringUtils.defaultString(str);
    System.out.println("defaultString : " + str1);

    str = "h e l l o j a v a .";
    // 문자열 중 공백 문자가 있으면 모두 제거.
    str1 = StringUtils.deleteWhitespace(str);
    System.out.println("deleteWhitespace : " + str1);

    str = "chocolleto";
    str1 = "chocolleto";
    // str과 str1이 동일한지 유무 반환.
    bool = StringUtils.equals(str, str1);
    System.out.println("equals : " + bool);

    str = "JAVA";
    str1 = "java";
    // 대소문자 무시하고 str과 str1 비교.
    bool = StringUtils.equalsIgnoreCase(str, str1);
    System.out.println("equalsIgnoreCase : " + bool);

    str = "chocolleto chocolleto";
    // str에서 첫 번째 co의 인덱스를 반환. (인덱스는 0부터 시작)
    int i = StringUtils.indexOf(str, "co");
    System.out.println("indexOf : " + i);

    // str에서 마지막 to의 인덱스 반환.
    i = StringUtils.lastIndexOf(str, "to");
    System.out.println("lastIndexOf : " + i);

    // str이 null이거나 길이가 0이면 true 반환.
    bool = StringUtils.isEmpty(str);
    System.out.println("isEmpty : " + bool);

    // str이 null이 아니거나 길이가 0이 아니면 true 반환.
    bool = StringUtils.isNotEmpty(str);
    System.out.println("isNotEmpty : " + bool);

    String[] str3 = {"java", "javascript", "jQuery", "json"};
    str = " | ";
    // array에서 문자열을 읽어와 ' | '를 구분자로 연결.
    str1 = StringUtils.join(str3, str);
    System.out.println("join : " + str1);

    str = "CHOCOLLETO";
    // str을 소문자로 변환.
    str1 = StringUtils.lowerCase(str);
    System.out.println("lowerCase : " + str1);

    str = "chocolleto";
    //str을 대문자로 변환.
    str1 = StringUtils.upperCase(str);
    System.out.println("upperCase : " + str1);

    str = "HELLO java";
    // 대문자는 소문자로, 소문자는 대문자로 변환.
    str1 = StringUtils.swapCase(str);
    System.out.println("swapCase : " + str1);

    //문자열의 앞뒤 순서를 바꿈.
    str1 = StringUtils.reverse(str);
    System.out.println("reverse : " + str1);

    str = "c++, java, c#, javascript, jQuery";
    // ','를 구분자로 사용하여 분리.
    String[] str2 = StringUtils.split(str, ',');
    for(int j=0 ; j < str2.length ; j++) {
    System.out.println("split str2[" + j + "] : " + str2[j]);
    }

    str = " java ";
    // 문자열 좌우에 있는 공백 문자를 제거.(trim()과 동일.)
    str1 = StringUtils.strip(str);
    System.out.println("strip : " + str1);

    // 문자열 좌우 공백 문자 제거.
    str1 = StringUtils.trim(str);
    System.out.println("trim : " + str1);

    }

    }
    /* output */

    contains : true
    defaultString : hello java.
    deleteWhitespace : hellojava.
    equals : true
    equalsIgnoreCase : true
    indexOf : 3
    lastIndexOf : 19
    isEmpty : false
    isNotEmpty : true
    join : java | javascript | jQuery | json
    lowerCase : chocolleto
    upperCase : CHOCOLLETO
    swapCase : hello JAVA
    reverse : avaj OLLEH
    split str2[0] : c++
    split str2[1] : java
    split str2[2] : c#
    split str2[3] : javascript
    split str2[4] : jQuery
    strip : java
    trim : java

     

     

    반환값함수명파라미터
    StringabbreviateString str, int maxWidth
    "…"를 포함한 지정한 사이즈로 문자열을 축소한다 maxWidth은 4보다 커야한다
    StringabbreviateString str, int offset, int maxWidth
    "…"를 포함한 지정한 사이즈로 문자열을 앞/뒤로 축소한다 offset은 7보다 커야한다
    StringcapitaliseString str
    deprecated
    StringcapitaliseAllWordsString str
    deprecated
    StringcapitalizeString str
    문자열중 첫번째 문자를 대문자로 만든다
    StringcenterString str, int size
    str의 길이가 size가 되도록 문자열 좌우에 공백문자를 하나씩 추가한다 (우측부터 시작한다)
    StringcenterString str, int size, char padChar
    str의 길이가 size가 되도록 문자열 좌우에 padChar를 하나씩 추가한다 (우측부터 시작한다)
    StringcenterString str, int size, String padStr
    str의 길이가 size가 되도록 문자열 좌우에 padStr을 하나씩 추가한다 (우측부터 시작한다)
    StringchompString str
    문자열 맨 끝에있는 '\n' , '\r', '\r\n'을 제거한다
    StringchompString str, String separator
    문자열 맨 끝에 separator가 있으면 이를 제거한다
    StringchompLastString str
    deprecated
    StringchompLastString str, String sep
    deprecated
    StringchopString str
    문자열 맨 끝에있는 문자 하나를 제거한다
    StringchopNewlineString str
    deprecated
    StringcleanString str
    deprecated
    StringconcatenateObject array[]
    deprecated
    booleancontainsString str, char searchChar
    str이 searchChar를 포함하고 있으면 true
    booleancontainsString str, String searchStr
    str이 searchStr을 포함하고 있으면 true
    booleancontainsNoneString str, char invalidChars[]
    str이 invalidChars의 각 문자를 모두 포함하고 있지 않으면 true
    booleancontainsNoneString str, String invalidChars
    str이 invalidChars를 모두 포함하고 있지 않으면 true
    booleancontainsOnlyString str, char valid[]
    str이 valid의 각 문자들만 포함하고 있어야 true
    booleancontainsOnlyString str, String validChars
    str이 validChars 들만을 포함하고 있어야 true
    intcountMatchesString str, String sub
    str중에 sub가 포함되어있는 갯수를 반환한다
    StringdefaultStringString str
    str이 null이면 ""를 반환하고 아니면 str을 반환한다
    StringdefaultStringString str, String defaultStr
    str이 null이면 defaultStr을 반환하고 아니면 str을 반환한다
    StringdeleteSpacesString str
    deprecated
    StringdeleteWhitespaceString str
    문자열중 공백문자가 있으면 모두 제거한다
    StringdifferenceString str1, String str2
    str1과 str2를 비교하여 다른부분을 반환한다 (str2의 부분을 반환)
    booleanequalsString str1, String str2
    str1이 null이면 str2가 null인지 유무를 반환하고 str1이 null이 아니면 str1과 str2의 equals를 반환
    booleanequalsIgnoreCaseString str1, String str2
    equals와 동일하며 대소문자를 무시하고 비교한다
    StringescapeString str
    deprecated
    StringgetChompString str, String sep
    deprecated
    StringgetNestedStringString str, String tag
    deprecated
    StringgetNestedStringString str, String open, String close
    deprecated
    StringgetPrechompString str, String sep
    deprecated
    intindexOfString str, char searchChar
    str에서 첫번째 searchChar의 인덱스를 반환한다
    intindexOfString str, char searchChar, int startPos
    str의 startPos 인덱스부터 첫번째 searchChar의 인덱스를 반환한다
    intindexOfString str, String searchStr
    str에서 첫번째 searchStr의 인덱스를 반환한다
    intindexOfString str, String searchStr, int startPos
    str의 startPos 인덱스로부터 첫번째 searchStr의 인덱스를 반환한다
    intindexOfAnyString str, char searchChars[]
    str에서 searchChars중 포함하고 있는 문자의 첫번째 인덱스를 반환한다
    intindexOfAnyString str String searchChars
    str에서 searchChars중 포함하고 있는 문자열의 첫번째 인덱스를 반환한다
    intindexOfAnyString str, String searchStrs[]
    str에서 searchStr중 포함하고 잇는 문자열의 첫번째 인덱스를 반환한다
    intindexOfAnyButString str char searchChars[]
    str에서 searchChars중 포함되지 않은 문자 첫번째 인덱스를 반환한다
    intindexOfAnyButString str, String searchChars
    str에서 searchChars중 포함되지 않은 문자 첫번째 인덱스를 반환한다
    intindexOfDifferenceString str1, String str2
    str1과 str2를 비교하여 문자열이 틀려지기 시작하는 인덱스를 반환한다
    booleanisAlphaString str
    문자열이 모두 Character.isLetter 이면 true (모두 문자이면 true)
    booleanisAlphanumericString str
    문자열이 모두 Character.isLetterOrDigit 이면 true (문자거나 숫자이면 true)
    booleanisAlphanumericSpaceString str
    문자열이 모두 Character.isLetterOrDigit 이거나 공백이면 true
    booleanisAlphaSpaceString str
    문자열이 모두 Character.isLetter 이거나 공백문자이면 true
    booleanisBlankString str
    문자열이 공백문자이거나 길이가 0이거나 null인경우 true
    booleanisEmptyString str
    문자열이 길이가 0이거나 null인경우 true
    booleanisNotBlankString str
    문자열이 공백문자도 아니고 길이가 0도 아니고 null도 아니면 true
    booleanisNotEmptyString str
    문자열이 길이가 0이 아니고 null도 아니면 true
    booleanisNumericString str
    문자열이 모두 Character.isDigit 이면 true (모두 숫자이면 true)
    booleanisNumericSpaceString str
    문자열이 모두 Character.isDigit 이거나 공백문자이면 true
    booleanisWhitespaceString str
    문자열이 모두 Character.isWhitespace 이면 true (모두 공백이면 true)
    StringjoinObject array[]
    array에서 문자열을 읽어와 모두 연결시킨다
    StringjoinObject array[], char separator
    array에서 문자열을 읽어와 separator를 구분자로 연결시킨다
    StringjoinObject array[], String separator
    array에서 문자열을 읽어와 separator를 구분자로 연결시킨다
    StringjoinIterator iterator, char separator
    iterator에서 문자열을 읽어와 separator를 구분자로 연결시킨다
    StringjoinIterator iterator, String separator
    iterator에서 문자열을 읽어와 separator를 구분자로 연결시킨다
    intlastIndexOfString str, char searchChar
    str에서 마지막 searchChar의 인덱스를 반환한다
    intlastIndexOfString str, char searchChar, int startPos
    str의 startPos 인덱스부터 마지막 searchChar의 인덱스를 반환한다
    intlastIndexOfString str, String searchStr
    str에서 마지막 searchStr의 인덱스를 반환한다
    intlastIndexOfString str, String searchStr, int startPos
    str의 startPos 인덱스부터 마지막 searchStr의 인덱스를 반환한다
    intlastIndexOfAnyString str, String searchStrs[]
    str에서 searchStr의 문자열들중 포함하고 있는 문자열의 마지막 인덱스를 반환한다
    StringleftString str, int len
    str의 좌측에서 len 길이만큼 문자열을 구한다
    StringleftPadString str, int size
    str의 길이가 size가 되도록 문자열 왼쪽에 ' '을 추가한다
    StringleftPadString str, int size, char padChar
    str의 길이가 size가 되도록 문자열 왼쪽에 padChar를 추가한다
    StringleftPadString str, int size, String padStr
    str의 길이가 size가 되도록 문자열 왼쪽에 padStr을 추가한다
    StringlowerCaseString str
    str을 소문자로 변환한다
    StringmidString str, int pos, int len
    str의 pos 인덱스부터 len 길이만큼의 문자열을 구한다
    StringoverlayString str, String overlay, int start, int end
    str의 start부터 end까지overlay로 변환한다
    StringoverlayStringString text, String overlay, int start, int end
    deprecated
    StringprechompString str, String sep
    deprecated
    StringrepeatString str, int repeat
    str을 repeat만큼 반복하여 반환한다
    StringreplaceString text, String repl, String width
    text에서 모든 repl을 width로 변환한다
    StringreplaceString text, String repl, String width, int max
    text에서 모든 repl을 width로 변환하는데 최대 max개만큼 변환한다
    StringreplaceCharsString str, char searchChar, char replaceChar
    str에서 searchChar를 replaceChar로 모두 변환한다
    StringreplaceCharsString str, String searchChars, String replaceChars
    str에서 searchChars를 replaceChars로 모두 변환한다
    StringreplaceOneString text, String repl, String width
    text에서 repl를 width로 변환하는데 첫번째 하나만 변환한다
    StringreverseString str
    문자열을 앞뒤 순서를 바꾼다
    StringreverseDelimitedString str, char separatorChar
    separatorChar를 구분으로 문자열을 나눈 후 나눠진 단어들을 역순으로 바꾼다
    StringreverseDelimitedStringString str, String separatorChars
    deprecated
    StringrightString str, int len
    str의 len길이만큼 우측에서 문자열을 구한다
    StringrightPadString str, int size
    str의 길이가 size가 되도록 문자열 오른쪽에 ' '을 추가한다
    StringrightPadString str, int size, char padChar
    str의 길이가 size가 되도록 문자열 오른쪽에 padChar를 추가한다
    StringrightPadString str, int size, String padStr
    str의 길이가 size가 되도록 문자열 오른쪽에 padStr을 추가한다
    String[]splitString str
    공백문자를 구분자로 사용하여 분리한다
    String[]splitString str, char separatorChar
    separatorChar를 구분자로 사용하여 분리한다
    String[]splitString str, String separatorChars
    separatorChars를 구분자로 사용하여 분리한다
    String[]splitString str, String seperatorChars, int max
    separatorChars를 구분자로 사용하여 분리한며 최대 max개 만큼한다. 배열의 크기는 max가 된다
    StringstripString str
    문자열 좌우에 있는 공백문자를 제거한다 trim과 동일하다
    StringstripString str, String stripChars
    문자열 좌우에 stripChars에 존재하는 문자를 제거한다
    String[]stripAllString strs[]
    배열에 있는 모든 문자열 좌우에 있는 공백문자를 제거한다
    String[]stripAllString strs[], String stripChars
    배열에 있는 모든 문자열 좌우에 stripChars에 존재하는 문자를 제거한다
    StringstripEndString str, String stripChars
    문자열 우측에만 strip 한다
    StringstripStartString str, String stripChars
    문자열 좌측에만 strip 한다
    StringstripToEmptyString str
    str이 null이면 ""를 반환하고 아니면 strip 한다
    StringstripToNullString str
    str이 null이면 null을 반환하고 아니면 strip 한다
    StringsubstringString str, int start
    str의 start 인덱스부터 문자열을 구한다
    StringsubstringString str, int start, int end
    str의 start 부터 end 인덱스 까지 문자열을 구한다
    StringsubstringAfterString str, String separator
    str의 처음 separator 부분부터 문자열을 구한다
    StringsubstringAfterLastString str, String separator
    str의 마지막 separator부분부터 문자열을 구한다
    StringsubstringBeforeString str, String separator
    str의 처음 separator 부분까지 문자열을 구한다
    StringsubstringBeforeLastString str, String separator
    str의 마지막 separator부분까지 문자열을 구한다
    StringsubstringBetweenString str, String tag
    str에서 tag 사이에 있는 문자열을 구한다
    StringsubstringBetweenString str, String open, String close
    str에서 open부터 close 까지 사이에 있는 문자열을 구한다
    StringswapCaseString str
    대문자는 소문자로 변환하고 소문자는 대문자로 변환한다
    StringtrimToNullString str
    str이 null이거나 length가 0이면 null을 반환하고 그렇지 않으면 좌우 공백문자를 제거한다
    StringtrimString str
    문자열 좌우 공백문자를 제거한다
    StringtrimToEmptyString str
    str이 null이면 ""를 반환하고 그렇지 않으면 좌우 공백문자를 제거한다
    StringuncapitaliseString str
    deprecated
    StringuncapitalizeString str
    문자열의 첫문자를 소문자로 변환한다
    StringupperCaseString str
    str을 대문자로 변환한다

     

    사용법

    모두 static 함수이기때문에 다음과 같이 사용하면 됩니다.

    String text = StringUtils.replace(str, repl, width);

     

     

     

    출처 :: http://blog.naver.com/chocolleto?Redirect=Log&logNo=30084396817

     

    또다른 출처 :: http://www.jakartaproject.com/board-read.do?boardId=jakarta&boardNo=111069298414100&categoryId=-1&command=READ&page=1 

    '프로그래밍 > JAVA' 카테고리의 다른 글

    Implementation (impl) 을 만들때 @Override 를 붙여야하는 이유  (0) 2016.09.23
    Forward와 Include의 차이점  (0) 2016.09.23
    Spring - Ioc & DI  (0) 2016.09.23
    Java Collection Framework (JCF)  (0) 2016.09.23
    디자인 패턴  (0) 2016.09.23
    Posted by 당구치는 개발자
    |