IntegerArrayConverter - String배열을 int배열로 변환

 

commons-beanutils-1.8.3-bin (스트링 배열을 인트배열로 변환).zip

 

기존의 변환 방법

1
2
3
4
5
6
7
8
9
//스트링 배열을 인트 배열로 바꿔야 하는데 좀 복잡하다.
 
String[] str = request.getParameterValues("example_no");//스트링 배열을 받고..
int[] exampleNo = new int[str.length];
 
//이렇게 for문으로 풀어서 변환 작업을 해야 한다.
for(int i = 0; i<str.length; i++){
     exampleNo[i] = Integer.parseInt(str[i]);
}

 

 

 IntegerArrayConverter클래스를 이용.

1
2
3
4
import org.apache.commons.beanutils.converters.*;
 
String[] str = request.getParameterValues("example_no");
int[] exampleNo = (int[]) new IntegerArrayConverter().convert(null, str);

-convert()의 리턴형은 인트배열 내용이 담긴 오브젝트형이므로 다운캐스팅을 해줘야 한다.

 

 -이 외에도 여러가지 형 변환 클래스들이 존재한다. 

 

어찌보면 코드를 줄일 수 있지만 라이브러리 찾느니 그냥 변환 시키는게 더 좋을 수도 있다... 라이브러리 찾느라 한나절..

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

쓰레드  (0) 2013.10.14
디자인 패턴  (0) 2013.10.14
내부클래스  (0) 2013.10.04
다형성 - 업캐스팅, 다운캐스팅  (0) 2013.10.02
다형성-인터페이스  (0) 2013.10.02

댓글()

내부클래스



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Test {
    public static void main(String a[]){
        TestClass c = new TestClass();
        c.innerClass.test1();
    }
}
class TestClass {
    String a = "TestClass 클래스의 멤버 변수.";
    
    class TestInnerClass{
        String b = "내부 TestInnerClass 클래스의 멤버 변수.";
        
        public void test1(){
            //내부 클래스는 외부 클래스의 멤버를 자신의 멤버처럼 사용할 수 있다.
            System.out.println(a);
            System.out.println(b);    
        }        
    }
    //클래스의 입장에서 내부클래스는 자신의 안에 있는것이 아닌
    //외부에 있는 다른 클래스처럼 인식 하므로 내부 클래스를 호출 할 수 있는 방법이 있어야 한다.
    //그중 하나가 내부클래스를 멤버로 선언 하는 것이다.
    TestInnerClass innerClass = new TestInnerClass();
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Test2 {
    public static void main(String a[]){
        //외부 클래스를 먼저 선언후, 외부 클래스를 통해서 내부클래스를 선언 하는 방법이 있다.
        Test2Class c = new Test2Class();
        Test2Class.Test2InnerClass ic = c.new Test2InnerClass();
        
        ic.test1();
    }
}
class Test2Class {
    String a = "TestClass 클래스의 멤버 변수.";
    
    class Test2InnerClass{
        String b = "내부 TestInnerClass 클래스의 멤버 변수.";
        
        public void test1(){
            //내부 클래스는 외부 클래스의 멤버를 자신의 멤버처럼 사용할 수 있다.
            System.out.println(a);
            System.out.println(b);    
        }        
    }
}



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
public class Test3 {
    public static void main(String a[]){
        //본래는 직접적으로 호출이 불가능 하지만 스태틱 내부클래스는 직접 호출이 가능하다.
        Test3Class.Test3InnerClass c = new Test3Class.Test3InnerClass("");
        c.test1();
    }
}
class Test3Class {
    String a = "Test3Class 클래스의 멤버 변수.";
    static String c = "Test3Class 클래스의 스태틱 멤버 변수";
    static class Test3InnerClass{        
        public Test3InnerClass(String b) {
            super();
            this.b = b;
        }
        String b = "내부 Test3InnerClass 클래스의 멤버 변수.";
        
        public void test1(){
            //내부 클래스는 외부 클래스의 멤버를 자신의 멤버처럼 사용할 수 있다.
            //System.out.println(a);//내부 스태틱 클래스는 외부클래스의 멤버를 호출 할 수 없다.
            System.out.println(b);
            System.out.println(c);//스태틱 내부 클래스는 외부의 스태틱 멤버만 호출이 가능하다.            
        }        
    }
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Test4 {
    public static void main(String a[]){
        Test4Class c = new Test4Class();
        //메소드 내에 선언된 내부 클래스는 외부에서 호출이 불가능 하다.
        //Test4Class.Test4InnerClass c1 = c.new Test4InnerClass();//에러!
    }
}
class Test4Class {
    String a = "Test4Class 클래스의 멤버 변수.";
    static String c = "Test4Class 클래스의 스태틱 멤버 변수";
    public void test4member(){
        //메소드 내에 선언된 내부 클래스.
        class test4InnerClass{
            String b = "test4InnerClass 내부 클래스의 멤버 변수.";
            public void test4InnerClassMember(){
                //메소드 내에 선언되었다 하더라도 외부 클래스의 멤버에 접근이 가능하다.
                System.out.println(a);
                System.out.println(b);
                System.out.println(c);
            }
        }
    }
}


댓글()

다형성 - 업캐스팅, 다운캐스팅

1. 업 캐스팅.

 

- 특정 객체가 하위 클래스의 형에서 상위의 클래스의 형으로 캐스팅 되는것.

- 업캐스팅은 다음과 같은 기술과 연결된다.

*상속, 오버라이딩, 가상메서드,  추상클래스, 인터페이스.

-일반적인 캐스팅의 원리는 작은 것이 큰 것으로 될수 있다는 것이다.

 

 

 

1
2
3
4
5
6
public class UpcastingTest {
    public static void main(String agr[]){
        byte b = 0;        
        int i = b;//byte형에서 int형으로 변환이 가능하다.
    }
}

 byte형에서 int형으로 캐스팅 되었다.

 

 

- 클래스의 업 캐스팅 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class UpcastingTest {
    public static void main(String agr[]){
        TestTop top = new TestBottom(); 
        //작은것(TestBottom)이 큰것(TestTop)으로 캐스팅 되었다.
        Top.Test1();
        Top.Test2();//에러! 이 경우 Top는 하위 클래스의 test2메소드 호출이 불가능하다.
 
    }
}
class TestTop{
    public void Test1(){        
    }
}
class TestBottom extends TestTop{
    public void test2(){        
    }
}

 

 이 경우, 상위 클래스인 TestTop은 하위 클래스인 TestBottom의 맴버메소드에 접근 할 수 없다.

하지만 오버라이딩과 가상 메소드 기법을 사용하여 접근 할 수 없는 부분을 사용할 수가 있다.

 

-가상메소드를 이용한 업캐스팅. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class UpcastingTest {
    public static void main(String agr[]){
        TestBottom bottom = new TestBottom();
        TestTop Top = bottom;
        bottom.Test1();        
        Top.Test1();//하위클래스에서 정의가 되었다면 하위클래스를 호출.
    }
}
class TestTop{
    public void Test1(){
        System.out.println("상위클래스의 멤버입니다.");
    }
}
class TestBottom extends TestTop{
    public void Test1(){
        System.out.println("하위클래스의 멤버입니다.");
    }
}

 결과

 

하위클래스의 멤버입니다.
하위클래스의 멤버입니다.

 

 

 

-상위클래스의 메소드를 호출했지만 하위클래스에서 같은 이름으로 메소드가 정의 되었다면 하위클래스의 메소드를 호출하게 된다.

물론, 하위클래스에서 정의 되지 않았으면 상위클래스의 메소드를 호출한다.

 

 

-추상메소드를 이용한 업캐스팅 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class UpcastingTest {
    public static void main(String agr[]){
        TestBottom bottom = new TestBottom();
        TestTop Top = bottom;
        bottom.Test1();        
        Top.Test1();    
    }
}
abstract class TestTop{
    public abstract void Test1();
}
class TestBottom extends TestTop{
    @Override
    public void Test1(){
        System.out.println("하위클래스의 멤버입니다.");
    }
}

 

결과

 

하위클래스의 멤버입니다.
하위클래스의 멤버입니다.
 

 

-추상클래스는 하위클래스에서 추상메소드를 오버라이딩 해야 객체생성이 되기때문에 가상메소드의 개념과 비슷하다.

 


2. 다운캐스팅

 

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

IntegerArrayConverter - String배열을 int배열로 변환  (0) 2013.10.06
내부클래스  (0) 2013.10.04
다형성-인터페이스  (0) 2013.10.02
다형성-추상클래스  (0) 2013.10.01
추상클래스, 인터페이스  (0) 2013.10.01

댓글()

다형성-인터페이스

1.인터페이스


- 추상클래스들 중 오로지 추상메소드로만 이루어져있는 추상클래스를 말한다.

- 골격이라는 개념이며, 추상메소드로만 이루어져 있다.(내용이 있는 구현된 메소드를 넣을 수 없다.)

 

- 인터페이스는 implements를 이용해서 추상 메서드를 구현한다.


-인터페이스 선언. Test.java
1
2
3
4
5
public interface Test {
    void a1();
    void a2();
 


-인터페이스 상속. Test1.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
class Test1{
    public static void main(String args[]){
        new Test2().a1();
        new Test2().a2();        
        new Test3().a1();
        new Test3().a2();
    }
}
class Test2 implements Test{
    @Override
    public void a1(){
        System.out.println("Test2의 a1입니다.");
    }
    @Override
    public void a2() {
        System.out.println("Test2의 a2입니다.");        
    }
}
class Test3 implements Test{
    @Override
    public void a1(){
        System.out.println("Test3의 a1입니다.");
    }
    @Override
    public void a2() {
        System.out.println("Test3의 a2입니다.");        
    }
}

-결과

 

Test2의 a1입니다.
Test2의 a2입니다.
Test3의 a1입니다.
Test3의 a2입니다.

 

-인터페이스도 추상클래스와 마찬가지로 모든 추상메소드내용을 정의해야 객채 생성이 가능하다.

인터페이스를 상속받아 추상 메소드를 전부 구현하지 않고 일부만 구현하면 추상클래스가 된다.

 

- 인터페이스는 final static 변수(상수 변수)를 가질 수 있다.

- 상수 변수는 전역적이며, 값 수정이 불가능 하다.



2.다중상속.


- 자바는 다중상속이 유용함에 불구하고 다중상속으로 인해 나타나는 문제점으로 인해 다중상속을 금지하고 있다.

*일부가 구현된 메소드를 가진 추상클래스를 각각 A, B가 상속받아 클래스를 구현하였다.

 클래스 C가 동시에 A와 B를 다중상속을 받게 되면 추상클래스에서 일부 구현된 메소드가 중복되게 된다.

(같은 이름과 같은 매개변수가 있는 메소드 2개를 동시에 가지게 된다.)

-...


'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

내부클래스  (0) 2013.10.04
다형성 - 업캐스팅, 다운캐스팅  (0) 2013.10.02
다형성-추상클래스  (0) 2013.10.01
추상클래스, 인터페이스  (0) 2013.10.01
커넥션 풀  (0) 2013.09.30

댓글()

다형성-추상클래스

- 하나로 여러가지 일을 하는 것.


1.추상(Abstract)클래스


- 자바에서의 추상은 '완전하지 않다'라는 의미로 해석하면 된다.

- 추상클래스 : 추상메서드를 일부 포함하는 클래스.

- 추상메소드 : 몸체가 없는 메소드.


- 몸체가 없는 메소드를 추상메소드라고 하며 추상메소드를 하나 이상 포함하는 클래스는 추상 메소드이다.

- 추상 클래스는 extends를 이용해서 추상 메서드를 구현한다.

-예제)

Test.java
1
2
3
4
5
6
7
8
9
10
public abstract class Test {
       public void a1(){
        //멤버 메소드.
        System.out.println("a1");
    }
       public abstract void a2();
//추상메소드. {}괄호가 없이 ;로 끝난다.
//즉 몸체가 없다.
}
 


Test1.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class test1 {
    public static void main(String args[]){
        new test2().a1();
        new test2().a2();
    }
    
}
class test2 extends Test{
 
    @Override
    public void a2() {
        System.out.println("a2");        
    }
    
}
 


결과 

a1

a2


- 추상클래스는 절대 직접적으로 객체 생성이 불가능 하다. 완전하지 못한 추상메소드가 존재하기 때문이다.

  추상클래스를 사용하기 위해서는 클래스에서 추상클래스를 상속 받아 추상메소드를 오버라이딩하여 완성 시켜야 한다.


- 추상클래스를 상속받은 하위 클래스에서 추상메소드를 오버라이딩 하지 않으면 하위 클래스도 추상클래스가 된다.


- 추상메소드를 가지지 않는 추상클래스가 존재 할 수도 있다

이 경우는 상속을 받기만 하면 완전한 클래스가 되기때문에 따로 오버라이딩 하지 않아도 객체 생성이 가능하다.



댓글()

추상클래스, 인터페이스

http://www.xfind.co.kr/xgb/bbs/board.php?bo_table=04_4&wr_id=48

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

다형성-인터페이스  (0) 2013.10.02
다형성-추상클래스  (0) 2013.10.01
커넥션 풀  (0) 2013.09.30
[이클립스 플러그인]SubVersive, svnConnector(svn 설치)  (0) 2013.09.30
아파치/톰캣 설치하기  (0) 2013.09.27

댓글()

커넥션 풀

 jdbc를 사용하여 db에 접속하기 위해서는 드라이버를 로드하고 connection 객체를 생성해야 한다. 이 경우 db에 접속할 때마다 드라이버를 로드하고 커넥션 객체를 생성하고 close해야 하는데 접속자가 많을 경우 서버에 부하를 줄 수 있다.

 이를 해결하기 위해 커넥션 풀을 사용한다.

 

1. Connection pool

 

db와 연결된 connection을 미리 만들어 pool속에 저장했다가 접속이 필요한 때에 불러와 사용하고 다시 pool로 반환하는 기법. 다 사용한 커넥션을 재사용 하기 때문에 다시 커넥션을 생성 할 필요가 없다.

 

2. 커넥션 풀 사용하기.

 

2-1. 라이브러리 다운.

 

- http://commons.apache.org/proper/commons-collections/

- http://commons.apache.org/proper/commons-dbcp/

- http://commons.apache.org/proper/commons-pool/

 각각 접속하여 다운 받는다.

 

2-2. 코드 추가.

 

- /META-INF/context.xml

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Context>
<!-- 오라클 db에 접속하기 위한 코드 --><!-- 이름을 잘 기억하고 있어야 한다. -->
<Resource     name="jdbc/myoracle"
            auth="Container"
            type="javax.sql.DataSource" 
            driverClassName="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
            username="scots" password="tiges"
            maxActive="20" maxIdle="10" maxWait="-1"/>
<!-- mysql db에 접속하기 위한 코드 -->
<Resource    name="jdbc/mymysql"
            auth="Container"
            type="javax.sql.DataSource"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/exam"
            username="root" password="java1234"                   
            maxActive="200" maxIdle="100" maxWait="-1"/>    
 
</Context>

 

-/WEB-INF/web.xml <web-app>태그 사이에 추가.

1
2
3
4
5
6
  <resource-ref>
     <description>Connection</description>
     <res-ref-name>jdbc/OracleDB</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>

 

 

2-3. jdbc에 적용.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DBManager {
    public static Connection getConnection(){
        Connection conn = null;
        try{
          // 이부분을 추가하면 된다.
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");        
        DataSource ds = (DataSource)envContext.lookup("jdbc/mymysql");//"jdbc/myoracle"
        conn = ds.getConnection();
        
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
}

댓글()

[이클립스 플러그인]SubVersive, svnConnector(svn 설치)

인스톨창을 실행하는 메뉴 위치.


1.svn을 위한 SubVersive플러그인 설치.



 - http://download.eclipse.org/technology/subversive/1.1/update-site/ (버전이 바뀔경우 주소가 달라질 수 있다.) 

주소를 넣으면 리스트가 뜬다. SVN Team을 선택후 next를 눌러 설치한다.

 

- 설치 완료가 되면 이클립스가 재부팅 된다.






2.svnConnector 플러그인 설치

 


- http://community.polarion.com/projects/subversive/download/eclipse/3.0/kepler-site/ (버전이 바뀔경우 주소가 달라질 수 있다.) 입력후 리스트가 뜨면 SVN Kit중 버전을 선택한 후 next를 눌러 설치를 시작한다.


- 1.3.8 버전 외에 여러가지가 있으므로 잘 선택하여 설치한다.




3. connector 버전 확인, 선택하기






'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

추상클래스, 인터페이스  (0) 2013.10.01
커넥션 풀  (0) 2013.09.30
아파치/톰캣 설치하기  (0) 2013.09.27
[자바 라이브러리]JDBC  (0) 2013.09.27
자바 개발을 위한 이클립스 설치하기  (0) 2013.09.27

댓글()

아파치/톰캣 설치하기

 다운로드 페이지 - http://tomcat.apache.org/


웹서버(아파치)와 웹 컨테이너(톰캣)이 합쳐진


웹 어플리케이션이다.


실행 하기 위해서는


jdk/bin 폴더를 PATH 에, 


jdk를 JAVA_HOME,


jre를 JRE_HOME 으로 패스를 잡아야 한다.


이클립스 쓰면 할 필요 없음.



댓글()

[자바 라이브러리]JDBC

http://cafe.naver.com/jjdev/768?social=1


http://dev.mysql.com/downloads/connector/j/

댓글()