티스토리 툴바


OOP를 한다 말하면서, 정작 클래스, 객체, 인스턴스를 명확히 구분하고 있지는 않았던것  같다 대부분 혼용하고 있고 잘못된 설명(추상화에 대한 개념도 애매하고, 심지어 상속도 혼용하면서 설명하고 있다.)도 더러 있었다. 

사전적 의미를  한번 찾아봤다. 설명하기 편한 의미를 주로 정리해보면 아래와 같다.(네이버 영어사전 참조)

* class : 등급 부류, 종류
* object : 물체, 대상, 목적, 목표
* instance : 사례, 경우

객체지향 수업 맨처음에 항상 듣던 설명이 생각 난다.

"클래스는 붕어빵 틀이고, 객체는 붕어빵이다"

사전적인 의미와 위 설명에 비추어볼때. 클래스와 객체는 상호적인 의미로 쓰인다는 것을 알수 있다. 
클래스는 어떠한 틀이고 객체는 상대적으로 그 틀에서 만들어진 대상이라는 것을 의미한다. 인스턴스는 결과적으로  Object의 사례들을 의미한다.

   우리가 헷갈려 했던것은, Class는 실제 코드로 기술되어 눈으로 볼수 있는데 객체를 그렇지 못하다는 것에서 오는 것이라고 생각한다.

사전적인 의미로 다시 정리하자면, "클래스를 인스턴스화 한 것이 객체" 가 되겠다.

그래서, 실제 인스턴스와 객체를 혼용하여 사용할 수밖에 없지만, 실제로는 느낌이 다르다. 
객체는 모든 인스턴스를 대표하는 포괄적인 의미로 주로 사용되며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조할 때 사용한다.
  예를 들면 붕어빵은 인스턴스라는 말보다, 붕어빵은 객체라는 표현이, 붕어빵은 붕어빵틀의 객체라는 표현보다는 붕어빵은 붕어빵틀의 인스턴스라는 표현이 더 자연스럽다.

마지막으로 실제 코드를 보면서 표현해보고 마무리 해본다.

OpenmayaMessage message = new OpenmayaMessage();

아래와 같이 사용될수 있다.
- message는 객체다. message객체는 ~~~한 역할을 한다.
- message는 OpenmayaMessage의 인스턴스이다.




Posted by openmaya

2012/01/22 01:29 기타

피해야 할 팀원

뭔가 시도해보지도 않고 절대적으로 안된다고 말하는 사람들을 피하고, 다른 상황에 대해서 고려도 해보지 않고 단정적인 말투로 이야기하는 사람들을 피하자. 그들은 단지 팀웤이란 관료주의적인 회식문화만을 통해서 팀웤이 존재한다고 믿는다.

  언젠가 "저 분은 Working 메모리가 좋아서 업무 능력이 좋으신것 같아요. 회사에서 필요한 업무방식 아닐까요?"라는 나의 말에, 어떤 분이 말씀하시길 "한 타입의 사람만 팀에 존재해서는 무료함만 가져올 뿐이고 각각의 색깔로 조화롭게 존재할때 비로소 팀웤이 생긴다"라고 하셨다.
  연장선상에서 생각해보자면 어떠한 한가지 타입만을 쫒을게 아니라 각각의 개성이 있고, 서로 맞춰가는게 중요하다는 것이다.

MMORPG로 비유하자면,  레이드는 혼자갈수 없고 각각의 벨런스가 좋아야 던전을  마칠수 있다랄까?

 
Posted by openmaya


# 각종 파일 포멧 구조

http://www.wotsit.org/list.asp?al=X



# 엑셀관련 라이브러리찾은거

1. libexcel - https://github.com/devinsmith/libexcel

엑셀 파일 생성

src에서 make 후 tests 디렉토리에서 make하면 실행파일 생성되고 바로 확인 가능


2.  http://chicago.sourceforge.net/devel/docs/excel/

엑셀파일 읽기용 

위 사이트에 아래 이름의 소스코드가 있다는군, 실행은 시간이 없어서 ㅎ

xlhtml 

xlreader 


Posted by openmaya
How to include the svn keywords in Eclipse Code templates

특정 svn 키워드를 커밋직전에 해당하는 정보로 바꾼후 커밋을 해주는 기능이 Subservsion에 있다.
이클립스에서 이를 사용하는 상법을 소개한다.

이클립스 소스코드에서 마우스 오른쪽 버튼을 누른후 Team -> Set property선택 


 


항목중에 svn:keywords를 선택

 

선택할수 있는 Svn 키워드들이 있는데 아래와 같이 Revision은 Rev, LastChangedRevision으로 alias 되어있음을 볼수 있다. 난 여기서 가장 짧은 "Rev"를 이용하기로 했다

 

실제 revision번호가 삽입될 위치에 가서 "$Rev$"라고 입력 해둔후 커밋하고, 확인해보면,
$Rev : 1234 $ 라고 입력된 것을 확인할 수 있다.
Posted by openmaya
메이븐 디렉토리를 정리하고자 옮겼더니, 제목과 같은 에러메시지가 나온다.
쉘환경변수의 JAVA_HOME를 전부 바꿔봐도 같은 에러가 난다. 패닉 상태 @.@
인터넷을 찾아봐도 안나오고 @.@

mvn명령어가 쉘스크립트로 되어있다는 것에 착안 코드보기를 하니 맨위에 떡하니 JAVA_HOME이 보인다. 설치시 설정이 그냥 초기 환경변수로 @.@ 난 주석처리 해버림 @.@ ㅋ

화이팅.. 
Posted by openmaya
https://developer.mozilla.org/En/DOM/Window.open#Best_practices

<script type="text/javascript">
 var windowObjectReference = null; // global variable

 function openRequestedPopup(strUrl, strWindowName)
 {
  if(windowObjectReference == null || windowObjectReference.closed)
  {
    windowObjectReference = window.open(strUrl, strWindowName,
           "resizable=yes,scrollbars=yes,status=yes");
  }
  else
  {
    windowObjectReference.focus();
  };
 }
 </script>
 (...)

 <p><a href="http://www.spreadfirefox.com/" target="PromoteFirefoxWindow"
 onclick="openRequestedPopup(this.href, this.target); return false;"
 title="This link will create a new window or will re-use 
 an already opened one">Promote 
 Firefox adoption</a></p>
 
Posted by openmaya
http://www.favicon.co.uk/index.php
 
Posted by openmaya
위책 한글판 2판 번역본 330페이지 세번째 단락 상태-검사 메소드와 식별 값을 반환하는 방법을 선택하는데 좋은 지침이 있다고 소개하고 있는데 거기에서 아래 문장이 이해가 되지 않았다.

"만일 별도로 만든 상태-검사 메소드가 상태-검사(State-testing) 메소드가 상태-종속(State-dependent) 메소드의 일을 중복 처리한다면, 성능을 고려해서 식별 값 반환 방법을 사용해야 한다."


위에서 상태-검사의 예로든 Iterator의 hasNext, 상태-종속의 예로든 next 를 생각해보자

언뜻 생각하면 hasNext()는 배열의 다음 값이 null인지 체크해서 가져오도록 구현할수 있다. 하지만 next()와 내용이 중복되고, 위에서 설명한대로 존재 이유가 사라진다. 그렇게 되면 Iterator를 설명하는데 있어서 모순이 생긴다. 하지만 배열의 크기는 이미 알고있으므로 현재 index와 배열의 크기를 비교하여 로직을 구성한다면 next의 로직과 다르게 되므로 존재 이유가 성립한다.

 위 설명 이전에 "객체의 상태를 변경해야 한다면 식별 값 반환방법을 이용해야 한다"고 설명하고 있다.
Iterator를 예로 들면 hasNext를 true로 리턴했으나 next()를 리턴하기전 데이터가 삭제되었다는 상황을 가정해보자.
next()호출시 null값을 리턴하게 되므로 이때는 hasNext()의 존재가 유명무실 해진다. 

  이런경우가 바로 정상적인 흐름에서 벗어난 경우로 next()로서는 예외 상황이된다. 그래서 버그를 분명하게 알수 있다고 이야기한다.

아직도 풀리지 않은 내용은 많다. 
Posted by openmaya
스프링의 RestTemplate은 thread-safe한가 의구심이 제기되어 조사해본결과 RestTemplate자체는 그렇다라고 되어있고 내부적으로 HttpClinet를 사용하려 하니 과연 HttpClient(3.1)도 가능한가 의문이 들었다. 
일단 메인페이지(
http://hc.apache.org/httpclient-legacy/performance.html)에 나온 동시성에 관한언급(첫페이지 Concurrent execution of HTTP methods)을 살펴보면 

직역 : 만약 어플리케이션로직이 멀티 HTTP호출을 동시에 실행하도록 허용한다면(예- 여러 사이트에 대하여 구분된 멀티요청 또는 멀티요청이 사용자별로 구별하여 작성된 요청), HTTP 세션에 할당된 스레드의 사용은 중요한 성능적 이득을 결과로 얻을수 있다.

  HttpClient는 완전히 스레드 세이프한데 MultiThreadedHttpConnectionManager와 같은 스레드세이프한 커넥션 매니저를 사용할때 그렇다.

기억할것은 각각의 스레드의 실행은 HTTPMethod의 로컬 인스턴스와, 호스트설정과 대화상태의 정의를 표현한 HTTPState 또는 HostConfiguration의 로컬인스턴스를 가질수 있어야 한다는 것이다. 

이와 동시에, HttpClient 인스턴스와 커넥션매니저는 최대효율을 위해 모든 스레드들사이에 공유되어야 한다.

HttpClient와 함께 멀티플한 스레드를 사용하기 위한 자세한 내용은 HttpClient 스레딩 가이드를 참조하길 바란다.

요약하자면

MultiThreadedHttpConnectionManager를 사용할때 Thread-safe하고, HTTPMethod나 HttpState, HostConfigureation은 호출할때마다 새로 만들어서 넣어줘야 한다는 이야기.

자세한 내용은 HttpClient 스레딩 가이드(http://hc.apache.org/httpclient-legacy/threading.html) 를 읽어보길 바란다




Posted by openmaya
String fqnOfCategoryClass = null;
Category logger = new Category("PhotoInfraLogger");
long timeStamp = (new Date()).getTime();
Priority level = new Priority();
Throwable throwable = null;
event = new LoggingEvent(fqnOfCategoryClass, logger, timeStamp, level, logMessage, throwable);
Posted by openmaya
이전버튼 1 2 3 4 5 ... 8 이전버튼

블로그 이미지
openmaya

공지사항

Yesterday20
Today0
Total29,480

달력

 « |  » 2012.01
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        

최근에 받은 트랙백

글 보관함