public class FileBrowsingAction extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //super.service(request, response); // 없어야됨. 있으면 슈퍼클래스에서 응답처리됨.
       
        // 파일 목록 얻기
       
       
        String jspName = "/file_browsing.jsp";
       
        getServletConfig().getServletContext().getRequestDispatcher(jspName).forward(request,response);
    }
}

서블릿도 안쓰다보니 까먹었다.

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

[jsp] jstl 설명  (0) 2010.01.08
[jsp] jstl 설치  (0) 2010.01.08
[javascript] addLoadEvent  (0) 2010.01.04
[jQuery] 브라우져 알아내기  (0) 2009.12.17
[jQuery] jQuery로 현재 페이지에서 스크롤된 높이 알아내기  (0) 2009.12.17
일단 살짝 다 읽어본 감상.

저자는 어떠한 환경에서도 웹에 접근할 수 있어야 함을 강조.
그를 위해서 마크업/CSS/스크립트를 분리해야 한다고 말하고 있다.

옳은 말이라고는 생각하나 실제 프로젝트에서 이걸 100% 지키기는 힘들어 보인다.
한국이라서 그런가?

특히나 스크립트를 완전히 분리해서 쓰는 것은 어지간한 실력이 아니면 힘들 듯.
게다가 시간도 많이 필요하고...

ajax에 대해서도 ajax가 불가능한 브라우저도 고려해야 한다고 말하고 있음.

결국, 프로젝트에서 완벽하게 위의 사항들 - 저자의 주장 - 을 지키면서
개발을 할 수 있는가의 문제가 현실적인 문제가 되겠는데
내 짧은 생각으론 조금만 복잡한 웹사이트 또는 RIA를 만드는 경우에는
위의 사항들을 다 지키기는 어렵지 않을까 싶다.

또 꼭 이렇게까지 안해도 될 듯 싶고.
여러가지 좋은 javascript framework들도 나와있고 - jQuery 같은. ^^;;

'감상문' 카테고리의 다른 글

[article] 개방(open)의 의미  (0) 2010.01.22
[book] UML Distilled  (0) 2010.01.21
[감상] 웹2.0이란?  (0) 2009.02.03
[감상] 과속스캔들  (0) 2009.01.29
[감상] 작전명 발키리  (0) 2009.01.29

[javascript] addLoadEvent

프로그래밍/Web 2010. 1. 4. 16:29 Posted by galad
출처: http://simon.incutio.com

function addLoadEvent(func) {
    var oldonload = window.onload;

    if(typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function() {
            oldonload();
            func();
        };
    }
}

addLoadEvent(functionA);

기존의 함수(oldonload)와 새 함수(func)를 모두 실행하는 무명함수를 window.onload에 attach.
addLoadEvent(함수명)이 실행될때마다 계속 초기에 실행되는 함수가 증가.

[iPhone] 아이폰에서 이모티콘 쓰기

Apple 2009. 12. 21. 17:01 Posted by galad
참조: http://shoppinggod.pe.kr/164

1. 앱스토어에서 Spell Number 라는 프로그램을 받는다.
2. 설치 후 91929394.59 를 입력하고 홈버튼 클릭해서 프로그램 종료. 오타 시 재실행 후 재시도.
3. 설정>일반>키보드>다국어키보드>일본어>이모티콘 을 활성화. 일본 아이폰에만 가능한 키보드를 풀어주는 듯.
4. 설정 후에는 Spell Number는 지워도 상관없음.

[jQuery] 브라우져 알아내기

프로그래밍/Web 2009. 12. 17. 15:43 Posted by galad
var m_browser;
var m_version;

function detectBrowser() {
    if($.browser.msie) {
        m_browser = "msie";
    }
    else if($.browser.safari) {
        m_browser = "safari";
    }
    else if($.browser.opera) {
        m_browser = "opera";
    }
    else if($.browser.mozilla) {
        m_browser = "mozilla";
    }

    m_version = $.browser.version;

    //alert(m_browser + " " + m_version);
}

$.browser.mozilla
$.browser.version

http://visualjquery.com/ 여기서 Utilites > User Agent 참고
$(window).scrollTop()

간단하군....
div에다가 createElement로 노드들을 추가하면 div의 높이가 변하는게 당연해 보이는데 - IE6에서는 변한다
Firefox, Crome 등의 브라우저에서는 초기에 설정된 값이 변하지 않는다.

여기저기 뒤져서
1. html, body, div의 height를 100%로 주면 된다 - http://www.webmasterworld.com/forum83/200.htm
  하지만 이건 창 크기가 변할 때 쓰는 듯하고.(element가 추가되는 경우에는 제대로 div가 커지지 않았음)

2. min-height를 주면 된다 - http://forum.standardmag.org/viewtopic.php?id=2239
  안된다 ㅠ.ㅠ

등의 글을 참고했지만 안됨...

모르겠음 ㅠ.ㅠ

그냥 추가되는 노드의 수 만큼 직접 height를 수정하는게 나을 듯.
출처: http://srchun.springnote.com/pages/4799503

브라우저 별로 크기가 다르다는 얘기..

scrollHieght 찾다가 나왔음...
        var el = document.createElement("span");
        el.setAttribute("title", key);
        el.setAttribute("class", "dpCatLabel");
      //el.setAttribute("onclick", "alert('TEST');"); // DOESN'T WORK. onclick is not attribute.
      el.onclick=function(){alert("TEST");};
        var txt = document.createTextNode(label);
        el.appendChild(txt);

onclick 등은 이벤트라서 setAttribute로 붙일 수 없고,
el.onclick=function;  으로 붙이자.

[jQuery] jQuery를 이용한 ajax

프로그래밍/Web 2009. 12. 16. 11:20 Posted by galad
function ajaxGetDpCatList() {
    //alert("ajax로 전체 전시 카테고리 정보 얻기");
    //alert($(this).attr("title"));
   
    var selectedCatId = $(this).attr("title");
    $("#selectedCatId").val(selectedCatId);
    //alert($("#selectedCatId").val());
   
    $.ajax({
        url: '${pageContext.request.contextPath}/categoryMapping/getDpCatList.omp',
        type: 'POST',
        dataType: 'json',
        timeout: 5000,
        error: function(){
            alert('전시 카테고리 정보를 얻는 중에 오류가 발생했습니다.');
        },
        success: function(data){
            //alert(data);
            //alert(data.dpCatList[0].key + " " + data.dpCatList[0].value);
            showDpCatList(data);
        }
    });
}

- json 형식으로 결과를 받겠다 해놓고, 결과가 json형식에 안맞아도 error.
- timeout 시간이 넘어가도 error. 처음엔 개발장비서 할 떄 계속 에러나서 원인을 못찾았었음. 주의할 것.

$.ajax외에도 $.post 같은 좀 더 간단한 jQuery 메소드가 있음.
http://www.ibm.com/developerworks/kr/library/wa-jquery3/

[javascript] HTML DOM 지우기

프로그래밍/Web 2009. 12. 16. 10:25 Posted by galad
createElement로 생성한 노드들을 지울때, 특정 노드 밑에 딸린 노드들을 몽창 한번에 지우는 메소드가 없는 건지 못찾은 건지,
아무튼 parentNode에 딸린 노드들을 전부 찾아서(getElementsByTag), for 루프 돌면서 지우는데 절반만 지워져서 헤매다가 원인을 찾았음

function deleteNodes(parentNode, tag) {
    var nodes = parentNode.getElementsByTagName(tag);
    var length = nodes.length;
    
    // 이건 nodes가 실시간으로 줄어들면서 length 자체가 줄어든다.
    // 따라서 아래의 for문에서 기존 nodes의 갯수만큼 루핑하면서 0번만 계속 지움.
    // i번을 삭제하면 stack overflow 남
    /*for(var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        parentNode.removeChild(node);
    }*/
    
    for(var i = 0; i < length; i++) {
        var node = nodes[0];
        parentNode.removeChild(node);
    }
}

위에 써놓은 것처럼

for(var i = 0; i < nodes.length; i++) {
    var node = nodes[i];
    parentNode.removeChild(node);
}

nodes.length로 한계치를 정하면 for 문 안에서 자식 노드를 하나씩 지울 때마다 nodes.length 가 하나씩 줄어든다. 실시간 반영?!
그래서 length를 따로 저장하고 맨 처음 것만 계속 지웠음.

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

[javascript] HTML DOM 생성 후 이벤트 추가  (0) 2009.12.16
[jQuery] jQuery를 이용한 ajax  (0) 2009.12.16
[jQuery] jQuery를 이용한 팝업. div, layer  (0) 2009.12.16
[json] json 사용법  (0) 2009.12.15
[html] html 특수기호  (3) 2009.09.08
출처: http://whdrnr01.textcube.com/7?t=c&i=0

jQuery를 이용해서, div의 설정 변경을 통한 레이어 팝업.
ajax랑 함께 쓰면, ajax를 이용해서 데이터를 얻어온 후, div의 안에 원하는 형태로 데이터를 넣고 나서 보여주는 형식이 될 듯.

소스출처: http://yensdesign.com/tutorials/popupjquery/

/**
 * jQuery를 이용한 초기 설정
 */
$(document).ready(function() {
    // 마우스 오버 시 배경색 반전
    $(".catLabel1").hover(
        function() { // hover 시
            $(this).css({"background-color":"yellow", "font-weight":"bolder" });
        },
        function() { // out 시
            $(this).css({"background-color":"white", "font-weight":"normal" });
        }
    );

    $(".catLabel2").hover(
            function() { // hover 시
                $(this).css({"background-color":"yellow", "font-weight":"bolder" });
            },
            function() { // out 시
                $(this).css({"background-color":"white", "font-weight":"normal" });
            }
        );
   
    // 표준분류 선택 시 전시 카테고리 목록을 표시한다.
    $(".catLabel1").click(showAlert);
    $(".catLabel2").click(ajaxGetDpCatList);
   
    //CLOSING POPUP
    //Click the x event!
    /*$("#popupContactClose").click(function(){
        disablePopup();
    });*/
    //Click out event!
    $("#backgroundPopup").click(function(){
        disablePopup();
    });
    //Press Escape event!
    $(document).keypress(function(e){
        if(e.keyCode==27 && popupStatus==1){
            disablePopup();
        }
    });
});

/**
 * 표준 분류의 대분류 선택 시 경고 메시지
 */
function showAlert() {
    alert("표준 카테고리의 중분류를 선택해 주세요.");
}

/**
 * ajax로 전시 카테고리 목록 얻어오기
 */
function ajaxGetDpCatList() {
    //alert("ajax로 전체 전시 카테고리 정보 얻기");
    //alert($(this).attr("title"));
   
    var selectedCatId = $(this).attr("title");
    $("#selectedCatId").val(selectedCatId);
    //alert($("#selectedCatId").val());
   
    $.ajax({
        url: '${pageContext.request.contextPath}/categoryMapping/getDpCatList.omp',
        type: 'POST',
        dataType: 'json',
        timeout: 5000,
        error: function(){
            alert('전시 카테고리 정보를 얻는 중에 오류가 발생했습니다.');
        },
        success: function(data){
            //alert(data);
            //alert(data.dpCatList[0].key + " " + data.dpCatList[0].value);
            showDpCatList(data);
        }
    });
}

/**
 * 전시 카테고리 목록 표시
 */
function showDpCatList(data) {
    //alert($("#selectedCatId").val());
    //alert(data.dpCatList.length);

    var dpCatListPopup = document.getElementById("dpCatListPopup");

    // dpCatListPopup 의 내용을 비움. 안하면 계속 늘어남
    deleteNodes(dpCatListPopup, "span");
    deleteNodes(dpCatListPopup, "br");

    // 전시 카테고리 표시용 목록 만들기
    var list = data.dpCatList;
    for(var i = 0; i < list.length; i++) {
        var key = list[i].key;
        var label = list[i].value;

        var el = document.createElement("span");
        el.setAttribute("title", key);
        el.setAttribute("class", "dpCatLabel");
        //el.setAttribute("onclick", "alert('TEST');"); // DOESN'T WORK. onclick is not attribute.
        el.onclick=function(){alert("TEST");};
        var txt = document.createTextNode(label);
        el.appendChild(txt);

        dpCatListPopup.appendChild(el);
        dpCatListPopup.appendChild(document.createElement("br"));
    }

    setPopupPosition();
    loadPopup();
}

function deleteNodes(parentNode, tag) {
    var nodes = parentNode.getElementsByTagName(tag);
    var length = nodes.length;
   
    // 이건 nodes가 실시간으로 줄어들면서 length 자체가 줄어든다.
    // 따라서 아래의 for문에서 기존 nodes의 갯수만큼 루핑하면서 0번만 계속 지움.
    // i번을 삭제하면 stack overflow 남
    /*for(var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        parentNode.removeChild(node);
    }*/
   
    for(var i = 0; i < length; i++) {
        var node = nodes[0];
        parentNode.removeChild(node);
    }
}

//0 means disabled; 1 means enabled;
var popupStatus = 0;

/**
 * set popup position
 */
function setPopupPosition(){
    var windowWidth = document.documentElement.clientWidth;
    var windowHeight = document.documentElement.scrollHeight; //clientHeight;
    var popupHeight = $("#dpCatListPopup").height();
    var popupWidth = $("#dpCatListPopup").width();
   
    //centering
    $("#dpCatListPopup").css({
        "position": "absolute",
        "top": 0, //windowHeight/2-popupHeight/2,
        "left": windowWidth/2-popupWidth/2
    });

    //only need force for IE6
    $("#backgroundPopup").css({
        "height": windowHeight
    });
   
}

function loadPopup(){
    //loads popup only if it is disabled
    if(popupStatus==0){
        $("#backgroundPopup").css({
            "opacity": "0.7"
        });
        $("#backgroundPopup").fadeIn("slow");
        $("#dpCatListPopup").fadeIn("slow");
        popupStatus = 1;
    }
}

function disablePopup(){
    //disables popup only if it is enabled
    if(popupStatus==1){
        $("#backgroundPopup").fadeOut("slow");
        $("#dpCatListPopup").fadeOut("slow");
       
        popupStatus = 0;
    }
}

setPopupPosition() 으로 위치 설정.
loadPopup() 으로 보이기
disablePopup() 으로 숨기기

backgroundPopup 랑 dpCatListPopup 는 div의 id.

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

[jQuery] jQuery를 이용한 ajax  (0) 2009.12.16
[javascript] HTML DOM 지우기  (0) 2009.12.16
[json] json 사용법  (0) 2009.12.15
[html] html 특수기호  (3) 2009.09.08
[servlet] servlet  (0) 2009.09.04

[json] json 사용법

프로그래밍/Web 2009. 12. 15. 11:23 Posted by galad
출처: http://mogaji.springnote.com/pages/314716

{"payCodeList":
        [
            {"key":"PD00290","value":"무료"},
            {"key":"PD00292","value":"기간정액제"}
        ]
}

key:value 쌍만으로는 안될때는 이런 식으로...

아래는 위의 출처 내용을 보관을 위해 발췌했음.

JSON은 무엇인가?

  1. JSON은 무엇인가?
    • 경량의 데이타 교환 포맷이다.
      > XML과 비교한다.
    • 간단한 포맷
      > 사람들을 위해 읽고 쓰기가 쉽다.
      > 기계들을 위해 분석과 생성이 쉽다.
    • JSON은 텍스트 포맷이다.
      > 언어에 독립적으로 프로그래밍된다.
      > 프로그래머들에게 잘 알려진 C,C++,C#,Java,JavaScript,Perl,Pyton을 포함하는 C와 유사한 언어로 모여서 사용된다.

  2. XML을 넘어 왜 JSON인가?
    • on-the-wire(선을 통한) 데이타 포맷인 XML보다 가볍고 빠르다.
    • JSON 오브젝트는 XML 데이타가 타입이 없는데 비해 타입을 가진다.
      > JSON types : string, number, array, boolean
      > XML 데이타는 모두 String 이다.
    • JavaScript 코드를 위해 Native 코드포맷이다.
      > Data는 사용자의 JavaScript코드 안에서 JSON 객체에 접근이 쉽다.
      XML 데이타가 해석과 장황한 DOM API를 통해 변수에 접근하는 것을 필요로 하는데 비해
      > 회수한 값들은 사용자의 자바스크립트 안의 객체속성에서 읽기가 쉽다.

  3. JSON은 어디에서 사용되는가?
    • 구성정보를 나타낸다.
    • 통신 프로토콜을 실행한다.

JSON Object

  1. JSON 구조
    • name/value 쌍으로 구성된다.
      > 여러가지의 언어들에서 object, record, struct, dictionary, hashtable, 키를 가지는 리스트, 배열집합 처럼 얻어진다.
    • 값들이 리스트는 순서가 있다.
      > 대부분의 언어들에서 array, vector, list, sequence 처럼 얻어진다.
    • JSON은 대부분의 지금의 언어를 통해 일반적인 데이타구조들이 지원된다.

  2. JSON Object 표기법
    • JSON Object는 name/value 쌍의 set은 순서가 없다.
    • JSON Object는 { 로 시작하고 } 로 끝난다.
    • 각각의 이름은 : 와 ,로 구분된 name/value 쌍의 형식을 따른다.

  3. JSON과 JavaScript
    • JSON은 JavaScript의 객체 문자 표기의 부분집합이다.
      > JSON은 JavaScript안에서 혼란스럽거나 야단스럽지 않게 사용될 수 있다.

  4. JSON Object 예제
     
    var myJSONObject = {"bindings": [
    {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
    {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
    {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
    ]
    };
    • 위의 예에서, JSON JavaScript 객체는 세개의 객체를 포함한 배열을 갖고있는, 각각은 "ircEvent","method","regex" 멤버들을 포함한 하나의 멤버 "bindings"를 포함하여 생성된다.
    • 멤버들은 점(.) 이나 그아래 지시자들로 회수 할수 있다.
       
      myJSONObject.bindings[0].method // "newURI"
  5. JavaScript 코드안에서 Text를 Object로 변환하기
     
    var myObject = eval('(' + myJSONtext + ')');
    • eval() 함수를 사용하여, JSON text를 JSON 객체로 변환한다.
      > eval()은 JavaScript 컴파일러에서 실행한다.
      > JSON은 JavaScript의 서브셋으로 적합하다. 컴파일러는 text를 정확하게 변환하고, 객체 구조를 만든다.

  6. 보안 & JSON Parser
    // Include http://www.json.org/json.js
    var myObject = myJSONtext.parseJSON();
    • eval()은 컴파일 할 수 있고, 어떤 JavaScript 프로그램에서도 실행된다. 그래서 보안 이슈들(cross-site scripting)을 가질 수 있다.
      > 소스를 신뢰할 수 있을때, eval()을 사용해라.
    • 보안이 염려될 때 - 소스를 신뢰할 수 없을때 - JSON parser를 사용하는게 낫다.
      > JSON parser는 JSON text를 승인할 수 있다. 그래서 좀더 안전하다.

  7. Object를 Text로 변환하기
     
    var myJSONText = myObject.toJSONString();
    • 사용자는 JSON 객체를 JSON text로 변환할 수 있다.
    • JSON은 주기적 데이타 구조를 지원하지 않는다.

      > Do not give cyclical structures to the JSON stringifier
      > 주기적 구조들을 JSON stringfier로 줄수 없다

Java 안에서의 JSON

  1. 자바 개발자를 위한 JSON Tools
    • Parser
      > JSON text 파일들을 해석하고, 그들을 자바 모델로 변환한다.
    • Renderer
      > 자바를 text로 표현하게 한다.
    • Serializer
      > 알기쉬운 POJO clusters를 JSON 표현으로 나열한다.
    • Validator
      > JSON 스키마를 사용하여 JSON 파일의 내용을 유효한지 체크한다.

  2. JSONObject 자바 클래스
    • JSONObject의 name/value 쌍의 집합은 순서가 없다.
    • put 메소드는 객체로 name/value쌍을 add 한다.
    • text들은 JSON syntax rules을 정확히 따른 toString 메소드에 의해 만들어진다.
       
      myString = new JSONObject().put("JSON", "Hello, World!").toString();
      // myString is {"JSON": "Hello, World"}

클라이언트와 서버사이드 양쪽에서 JSON 데이타를 주고 받는 방법

  1. 서버사이드에서 JSON 데이타를 생성하고 보내는 방법
    • JSONObject 자바 객체를 생성한다.
    • put 메소드를 사용하여 name/value 쌍을 add한다.
    • toString 메소드를 사용하여 String 타입으로 변환한다.
      그리고 "text/xml" 또는 "text/plain" 처럼 content-type과 함께 클라이언트로 보낸다.
       
      myString = new JSONObject().put("JSON",toString();
      // myString is {"JSON": "Hello, World"}
  2. 클라이언트 사이드에서 JSON 데이타를 받는 방법
    • JSON 데이타는 String 처럼 반환된다.
    • JavaScript 코드안에서 JSON 객체를 만들수 있게 eval()을 호출한다.
      > var JSONdata = eval(req.response.Text);
    • 사용자는 한번 JSON 객체를 가질수 있고, 객체의 속성들에 접근하기 위해 . 을 사용할 수 있다.
       
      var name = JSONdata.name;
      var address = JSONdata.addresses[3];
      var streetname = JSONdata.addresses[3].street;
    • 클라이언트 사이드에서 JSON 데이타를 생성하고 보내는 방법
    • JSON 자바스크립트 객체를 생성한다.
    • XMLHttpRequest객체의 open 메소드 안에 "POST" HTTO 메소드를 사용한다.
    • XMLHttpRequest객체의 send 메소드안에서 JSON 자바스크립트 객체를 패스한다.
       
      var carAsJSON = JSON.stringify(car);
      var url = "JSONExample?timeStamp=" + new Date().getTime();
      createXMLHttpRequest();
      xmlHttp.open("POST", url, true);
      xmlHttp.onreadystatechange = handleStateChange;
      xmlHttp.setRequestHeader("Content-Type",
      "application/x-www-form-urlencoded");
      xmlHttp.send(carAsJSON);
  3. 서버사이드에서 JSON 데이타를 받는 방법
    • String 타입처럼 JSON데이타를 읽는다.
    • string으로부터 JSONObject 자바객체를 생성한다.
       
      String json = readJSONStringFromRequestBody(request);
      //Use the JSON-Java binding library to create a JSON object in Java
      JSONObject jsonObject = null;
      try {
      jsonObject = new JSONObject(json);
      }
      catch(ParseException pe) {
      }

리소스들

  1. JSON 리소스들
    • Introducing JSON
    > http://www.json.org/
    • JSON in JavaScript
    > http://www.json.org/js.html
    • JSON in Java
    > http://www.json.org/java/index.html

참고문헌

문서에 대하여

최초작성자 : 난다
최초작성일 : 2007년 4월 17일
버전 : 0.1
문서이력 :

  • 2007년 4월 17일 난다 문서 최초 생성

    [출처] JSON|작성자 agileman


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

[javascript] HTML DOM 지우기  (0) 2009.12.16
[jQuery] jQuery를 이용한 팝업. div, layer  (0) 2009.12.16
[html] html 특수기호  (3) 2009.09.08
[servlet] servlet  (0) 2009.09.04
[jQuery] jQuery 예제 02  (0) 2009.09.04

[mac] 부팅 시 에러 등

Apple 2009. 12. 13. 15:54 Posted by galad
1. MBR 부트 영역 설정하기
 - 터미널에서 su 로 로그인. su 비번변경은 sudo passwd root 였던가??
 - 파티션 확인 : diskutil list
 - HFS Apple Mac OS X 가 OSX 파티션. rdisk의 번호와 disk0sX의 번호를 확인할 것
 - sudo fdisk -e /dev/rdisk0   >> rdiskX의 번호는 위의 diskutil의 목록에서 확인하기
 - flag 3 <= 앞서 확인한 맥 파티션 넘버
 - update
 - write
 - quit

2. 부팅 시 시디 빼기
 - 부팅 시 디스크 꺼내기 키 누르고 있기

3. 부팅 시 부트 영역 선택하기
 - 부팅 시 option 키 누르고 있기

4. 부트 시디 만들기
 - http://www.albireo.net/forum/showthread.php?t=110


[java] thorws .....

프로그래밍/Java 2009. 12. 11. 16:53 Posted by galad
메소드 정의 시 throws 하면, 그 메소드 사용하는 부분에서 반드시 try-catch 해야한다.
메소드 구현 시에 exception을 던지든 말든지 말이지...

반대로 정의 시에 throws 안하면, 그 메소드 사용하는 부분에서 try-catch 안해도됨.
메소드에서 exception을 던지든 말든지 말이지...

기본기가 점점 사라지는 느낌.
공부 좀 하자꾸나...

[program] 프로파일러

프로그래밍/Library 2009. 12. 3. 10:22 Posted by galad

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

[eclipse] plug-ins  (0) 2010.08.17
[browser] MS Expension Web SuperView  (0) 2010.04.08
[Eclipse] Aptana Studio  (0) 2009.11.30
[Eclipse] 형상관리 plug-in  (0) 2009.11.30
[eclipse] 이클립스 + Mantis  (0) 2009.10.27

[Eclipse] Aptana Studio

프로그래밍/Library 2009. 11. 30. 17:00 Posted by galad
http://download.aptana.org/tools/studio/plugin/install/studio

Ajax and JavaScript Libraries

Get unrivaled support for popular libraries including jQuery, Prototype, YUI, dojo, Ext JS, MooTools, and others.

Ruby on Rails, Python and PHP

Add powerful plugins and ready-to-use runtimes for Ruby on Rails, Python and PHP. Eclipse users can easily add Studio as a plugin.

등등의 개발을 위한 이클립스 플러그인.


http://www.aptana.org/

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

[browser] MS Expension Web SuperView  (0) 2010.04.08
[program] 프로파일러  (0) 2009.12.03
[Eclipse] 형상관리 plug-in  (0) 2009.11.30
[eclipse] 이클립스 + Mantis  (0) 2009.10.27
[Utils] Paros 사용법  (0) 2009.09.06

[Eclipse] 형상관리 plug-in

프로그래밍/Library 2009. 11. 30. 13:16 Posted by galad
http://downloads.open.collab.net/eclipse/update-site/e3.4

Software Updates 에서 사용하자

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

[program] 프로파일러  (0) 2009.12.03
[Eclipse] Aptana Studio  (0) 2009.11.30
[eclipse] 이클립스 + Mantis  (0) 2009.10.27
[Utils] Paros 사용법  (0) 2009.09.06
[Subversion] 오리지널 서브버젼 이클립스 플러그인  (0) 2009.08.28
프로토콜을 준수한다는 것

- 프로토콜을 준수한다는 것, 즉 conform한다는 것은, 한 클래스나 객체가 그 프로토콜의 모든 method를 다 구현하고 있다는 것이다.
 > NOTE : Class가 protocol을 formal하게 채용하지 않아도, method로써 protocol method들을 구현하면 자동으로 그 protocol을 준수하게 된다.
  -> @interface ClassName : ItsSuperclass < protocol list > 이런 식으로 formal 하게 protocol을 채용하지 않더라도 class가 protocol의 method를 구현하면 준수하게 된다고?
  -> 아닌 듯... 안되는데?? 소스 참고.



[Objective C] Protocol Object

프로그래밍/iPhone Dev 2009. 11. 26. 16:41 Posted by galad
Protocol Object

- runtime시에 protocol이 어떻게 표현되는지에 대해서 알아보자. 클래스는 class object로, 함수는 selector로 runtime시에 나타나듯이, formal protocol은 Protocol 클래스로 나타난다. protocol을 다루는 코드는 Protocol 오브젝트를 참조해야만 한다.

- protocol 객체를 참조하는 방법은 @protocol() 디렉티브를 이용해서 한다.

Protocol *counter = @protocol(ReferenceCounting);

- class 이름과 다른 점은, protocol 이름은 @protoco()안에 있는 것을 제외하고는, 어떤 한 객체를 의미하지는 않는다.
  -> ReferenceCounting 만으로는 아무것도 가리키지 않는다는 듯. class일 경우엔 class 이름만으로 class object를 가리키지만.

- 컴파일러는 다음의 경우에만 protocol 객체를 만든다.
  > 클래스에 의해서 adopt 되었을 때,
  > 소스코드에서 다른 어딘가를 참조했을 때 ( @protoco()을 사용해서.. )
즉 선언은 되었지만 사용되지 않는 protocol은 runtime시에 protocol 객체로 나타나지 않는다.