'자바'에 해당되는 글 3건

  1. 나도 자바 개발자.... 모바일로 항로를 수정할 수 있을까? (2)
  2. 자바에서interface와abstract에관해
  3. ResourceBundle의 활용

나도 자바 개발자.... 모바일로 항로를 수정할 수 있을까?



http://www.zdnet.co.kr/Contents/2010/04/11/zdnet20100411153250.htm

여기 나오는 이분..평소 google reader를 통해서 종종 보는 분이었습니다.
그런데.. 이번에 KOSTA에서 진행하는 안드로이드 교육을 갔습니다.
어디서 많이 본듯한 분이 강사로 계시더군요.
혹시나 혹시나 했는데 역시나였습니다.
요즘 이분에 대한 글을 자주 보게 되네요.
강의도 많이 하시더군요..

서론이 길군요 ㅋㅋ

이분은 okjsp를 운영하시던 분이셨습니다.
그런데 어느날 갑자기 모바일로 일을 하시더군요.

저도 마찬가지로 회사에서 jsp를 주로 개발하고 있고, 기회에 따라서 java도 개발하고 있습니다.
뭐 jsp + java를 보시는게 더 맞다라고 생각합니다.
근데 이번에 회사에서 모바일에 대한 앱을 만들려고 하는군요.
제 일을 아시는 분은 대충 짐작을 하실꺼라고 봅니다.
아이폰 4.0에서 지원이 되는 바람에 안드로이드에 아이폰까지 개발이 들어 갈 듯합니다.
물론 제가 아이폰을 하지는 않겠죠..

사실 요즘 갈등이 좀 있습니다.
경력도 얼마안된 제가 두 가지의 방향으로 일을 한다는 것이...
언어와 IDE가 모두 같기 때문에 별 문제가 없을 꺼라고 생각하시는 분이 있으시지만...
두 가지를 한다는 것은 회사에서 두 가지 일을 한다는 것이죠 ㅜㅡㅜ
책임감도 두배가 되고;;;일도 두배가 되네요...

요즘따라 한가지에 집중할 수 있다는 것이 부럽네요...

말하고 보니 항로 수정이 아니고, 두 길로 가는 것이군요.
조금 두렵네요..
모바일쪽은 하다가 안되면;;;;부업으로 뛰죠 뭐 ㅋㅋ
저작자 표시 비영리 변경 금지
신고

자바에서interface와abstract에관해



1. 공통점:
우선 아래 소스1을 보시면, 전형적인 interface,와 abstract 클래스를 나타내고 있습니다.
1) abstract와 interface는 그자체가 instance화 될수가 없습니다.
즉, TestInterface t = new TestInterface(), TestAbstract a = new TestAbstract();
둘다 컴파일을 해보면, 에러를 발생시킵니다.

2) Prototye만 있고 Body가 없는 메소드를 멤버함수로 가집니다.
소스1에서 보시는 봐와 같이 TestInterface, TestAbstract 는 함수 선언부는 존재하지만, 내용이 없는 함수들을 포함하고 있습니다.

3) abstract,interface 클래스를 사용하려면, abstract,interface 위클래스를 상속받아서, 새로운 클래스를 생성시킨후, instance화 할수가 있습니다.
소스2 에서 보는봐아 같이 상속을 받은후, 사용해야 합니다.
즉, childclass c = new childclass(); 님 컴파일시 에러가 발생하지 않습니다.

[소스1]
public interface TestInterface {
     public static int num = 8;
     public void func1();
     public void func2();
}

public abstract class TestAbstract {
     public abstract void func1() ;
     public void func2() {
          System.out.println("func2");
     }
}

[소스2]
class childclass1 extends TestAbstract {
     // Abstrace Method을 오버라이딩했습니다.
     public void func1() {
          System.out.println("상속 받아서, Body를 채워줬습니다.");
     }
}

class childclass2 implements TestInterface {
     public void func1() {
          System.out.println("Class Test1");
     }
     public void func2() {
          System.out.println("Class Test2");
     }
}

차이점:
1) Prototye만 있고 Body가 없는 메소드 즉 abstract메소드라고 하는데, Abstract 클래스는 abstract메소드와 일반 메소드를 혼용해서, 가질수 있습니다. 즉, 일반메소드 + abstrace메소드 형태를 유지한다는 겁니다.
하지만, interface는 모든 메소드들이 abstract 메소드로 존재 해야 합니다. 소스 1에서 보는봐와 같이 func1(), func2()는 모두 Body(내용) 이 없이 Prototype(선언만) 이 존재합니다.

2) interface와 abstrace클래스를 상속받을때, 상속받는 키워드 가 다릅니다.
abstract클래스는 소스2처럼, extends를 사용하고, interface클래스는 implements 을 사용합니다.

3) 다중상속 가능유무 입니다.
보통 자바에서는 일반 클래스에서는 다중상속을 지원하지 않습니다. 즉 2개이상의 클래스를 상속 받지 못하게 되어 있죠. 하지만, interface의 경우에는 다중상속이 가능합니다.

4) 클래스 시작 키워드가 다르죠.
abstract클래스는 abstract class.. 형태로 시작하고, 인터페이스 클래스는 interface..로 시작합니다.

결국 큰범주에서 보면, abstract method로만 이루어진 abstract class가 interface 인셈이죠.

신고

ResourceBundle의 활용



API 위치
java.util.ResourceBundle

역할
프로그램 배포시 고정된 자원과 변화하는 자원이 있다.
게시판 배포를 예로 든다면 안에 소스는 대부분 고정된 자원이다. 하지만 사용자마다 database의 설정 등은 수정해서 사용해야 하는 부분이다.
이러한 값들은 프로그램의 알고리즘 과 상관없는 부분으로 따로 관리해야 하는 자원들이다. 이러한 자원은 파일로 저장해서 관리하는 것이 보편적은 추세로 ResourceBundle을 이용 할 수 있다.

아래는 현재 사용중인 properties 파일이다.
ADMIN_ID=id
ADMIN_PWD=pass
MAX_UPLOAD_SIZE=6291456

위에서 보면 단순히 "="를 기준으로 해서 왼쪽에 key 오른쪽에 value가 들어가는 단순한 형식임을 볼 수 있다.
#주석
[key]=[value]

주의 할점은 String 형식이라고해서 ",' 이런걸 사용하면 안된다는 것이다.

ResourceBundle 클래스는 자원을 저장하고 반환하는 기능을 제공하는 클래스이다. 이 클래스의 getBundle 메소드는 파일이나 클래스등으로 부터 ResourceBundle 객체를 생성시켜 주어 key값을 통해 해당 value를 얻을 수 있다.

주요 메소드
static ResourceBundle getBundle(String baseName)
: 주어진 값으로 해당 자원을 가지는 ResourceBundle 객체를 만든다.
Object getObject(STring key)
: 키값에 해당되는 객체를 반환한다.
String getString(String key)
: 키값에 해당되는 문자열을 반환한다.

자원 파일
ResourceBundle 클래스는 국제화를 지원하기 위한 클래스로 파일명은 Locale 파일 규칙을 사용한다. 파일의 기본 이름은 "Res"이고, 언어 코드가 "ko", 지역 코드가 "KR"이라면 "Res_ko_KR.properties" 이런식으로 만들며 확장자는 반드시 .properties인 텍스트 파일이어야 한다. 하지만 우리는 국제화에 따라 다양한 언어와 지역을 지원하기 위해 사용하는 것이 아니니 그냥 "Res_성격에 맞는 이름.properties"로 사용하면 되겠다.

자원 파일의 위치
properties 파일은 getBundle 메소드에 의해 객체로 전환이 된다. 따라서 클래스 파일과 같이 위치를 추적하면 되겠다. 만일 "Res_test.properties"라는 파일을 classes 폴더 및에 test라는 폴더 아래 두었다면 우리는 "test.Res_test" 라고 해서 찾아가면 된다.

Res_test.properties
SINCE_YEAR=2002
SINCE_MONTH=5
SINCE_DATE=8
SINCE_DAY=Wednesday

이 파일을 "web-inf/classes/test/" 아래 두고 테스트를 해보겠다.

불러오기 테스트
간단하게 jsp에서 호출을 해보겠다.
resourceBundleTest.jsp
<%@ page contentType="text/html;charset=MS949"%>
<%@ page import!="java.util.ResourceBundle" %>
<%@ page import!="java.util.Enumeration" %>
<%
  ResourceBundle bundle = null;
  try {
       bundle = ResourceBundle.getBundle("test.Res_test");
       Enumeration enum = bundle.getKeys();
       for (; enum.hasMoreElements(); ) {
           String name = (String)enum.nextElement();
           String value = bundle.getString(name);
           out.println(name + " : " + value);
           out.println("<BR>");
       }
  } catch (Exception e) {
       out.println("Err: "+e.toString());
  }
%>

결과
SINCE_YEAR : 2002
SINCE_DATE : 8
SINCE_MONTH : 5
SINCE_DAY : Wednesday

ResourceBundle 클래스는 사용이 너무도 간단하기에 web에서 자주 사용되리라 생각된다.


신고