혼자서 비트단위로 메모리 표시해가며 고민해봤는데..

(ex) 4byte짜리 int -1 의 경우 비트 표시    11111111  11111111  11111111  11111111
즉 1byte 단위로 끊어와도  11111111  <- 제일 첫비트에 1이 표시되어 음수 표현이 가능

여기서 잘못생각한게.. byte    vs  char 타입의 차이아닌가? <-- 바보?

while(!EOF) 이 의미는 while표현식 안의 값이 true , false를 정해주는건데..  !-1 ? -> 비트 전부 반전되니까 000000 이 됨으로 
0의 불린 표현은 false가 되어서..? 에구 헷갈린다..

byte = 0~255  = 256개  <---  byte도 -128~127 이닷!!!
char = 2의 8승 256개 중에 -128~0~127 = 256개 (논리상 중간에 -0 +0 이 있는데 이중 +0을 표시하는 비트로 0를 표현하고 -0은 
음수 표현에 사용)

잘못 접근한듯... 흠.. 쓸데없는데 시간낭비 그만!

(4byte 짜리를 1byte 단위로 쓴다는 것, 1byte 단위로 읽어 온다는 것 즉 상위 3byte는 0값으로 채운다는 의미.
텍스트 방식인 2byte 단위로 쓴다는 것, 2byte 단위로 읽어온다는 것 역시 상위 2byte는 0값으로 채운다는 의미.
그럼으로 -1인  11111111 11111111 11111111 11111111 될리가 없다.)


엉뚱한 고찰인듯하다.. 

by givingsheart 2014. 1. 1. 15:47

put이라는 메서드의 도큐먼트 설명을 제대로 보지 않고,


단순하게 map이 중복을 허용하지 않기 때문에 put해도 중복된 키는 덮어쓰지 않고
튕겨 낼것이라 판단했다.

그리하여 map에 객체를 넣는데 있어..
isContainsKey() 메서드를 사용하지 않고 바로 put을 사용했다.

지금 확인해본 결과 put 메서드는 중복된 키값이 존재하면 덮어쓰고, 기존 키,오브젝트를
반환한다는 것을 알게 되었다. (나는 set의 add()처럼 저장을 거부할줄로만 알았다)

map자료구조에 add,remove는 있지만, 왜 set(update용 인터페이스)가 존재하지 않는
지를 생각해야한다. 또한 덮어쓰기(update)의 개념이 왜 필요한지도 생각해야한다.
키값은 동일하게 유지하되, 값을 변경하고 싶은 경우가 있을수 있다. (셋은 단일 원소(오브젝트)
의 집합(동일타입) vs 맵은 단일원소의 집합이 아니다.)
 
set에는 add(),remove()가 필요하고, map의 경우엔 put(add() + set()) ,remove가
필요한 것이다. 


똑똑한 개발자 분들이.. MAP, SET 자료 구조를 별도로 구현한 것은, 각각의 역할과 특성이 다르기 때문이다.
SET 은 영어 그대로 집합 = 중복 요소 금지 하는 자료구조이다.
MAP 은 데이터의 보관->검색(활용)시 이점을 두기 위해 KEY,VALUE로 묶은 요소를 KEY의 중복없이(VALUE중복 가능)
관리하는 자료구조이다.

배열도, 연결 리스트도,큐,스택, 트리등등.. 각각의 역할및 장,단점과 사용해야할 곳, 쓰지 말아야 할곳이 존재한다.
(게임 프로그래밍 할때.. 맵을 관리하기 위해 4진 트리 (좌상,좌하,우상,우하)로 맵을 잘라서, 그것을 프랙탈 처럼 반복하는 구조를 사용했었다. 상기하자.. 자료구조를 사용하면, 특정 문제를 쉽게 관리할 수 있다.)

=> 자만하지 말것. 어설프게 알지 말것! api 도큐먼트 보고 메서드의 동작을 확실하게 
확인후 사용할것!


by givingsheart 2014. 1. 1. 15:45

개략적인 이해만 하고 바로 실전 적용. (공부는 목적이 아닌, 수단!)

 

http://blog.naver.com/PostView.nhn?blogId=ljapc&logNo=30038952543&parentCategoryNo=7&viewDate=&currentPage=1&listtype=0



내툴에서 데이터들을 xml 파일 형식을 이용해 관리하려던 고민중에.. 내 툴의 추후 확장성을 고민해 클래스 모델을

설계하던중.. javax.xml.parser 패키지를 살피던중 validationProvider 인가 클래스의 명세를 보니 SAX를 지원하기 위한

클래스란 설명에 simple app for xml 를 검색중, sax과 약간 구분되는 개념인 dom에 접근하게 되었다.  


그리하여 xml DOM(document ojbect model) 이라는 개념을 접하게 되었다.



기존에 내 툴의 경우 확장성을 위해 상속 +  (타입 구분 + 리스트 구조)로서 구현하려 했었고

class DataType (RootElement로 Element 타입을 상속 or 포함 중 포함하려 했다.) 

{

I/O 클래스

Draw 클래스

Parser 클래스

}


class ConfigData extends DataType

{

   List<ConfigDataType> childs; 

}


class ImageData extends DataType

  enum Type

  {

  ConfigData,

  ImageData

  }

   List<ImageDataType> childs; 

...


 interface ConfigDataType

{

  enum Type

  {

    DbConfigDataType,

    EtcConfigDataType

  }

}


class DbConfigData implements ConfigDataType

{

  List<DbConfigDataType> childs;

}


class EtcConfigData implements ConfigDataType{}

...


interface DbConfigDataType

{

  enum Type

  {

    ConnectionConfigData,

    QueryConfigData

  }

}


class DbConnectConfigData implements DbConfigDataType()

{

  List<DbConnectConfigDataType> childs;

}


class DbQueryConfigData implements DbConfigDataType()

{

   List<DbQueryConfigDataType> childs;

}


class DbConnectConfigDataType   

{

String[] defaultDataTable = {"oracle","parkTable","park","111111","xxx.xxx.xx:4324"} 

 enum Type

 {

  DbName,

  DbTableName,

  DbLoginId, 

  DbLoginPw,

  DbUrl

  }

}


class DbQueryConfigDataType 

{

   String[] defaultDataTable = {"INSERT INTO tableName VALUES(?,?,? attribute갯수)","SELECT *     

                                          FROM tableName WHERE id(특정속성)", "xxx", "xxxx"} 

 enum Type

 {

  DbInsert,

  Dbselect,

  ...l

  }

}



//위와 같은 처리가 내 문제였다. key에 value를 매핑하는 여러 자료구조(property,xml의 elements,map 등등)

//에 대한 이해가 없었기에.. 또한 쿼리문 같은 경우 조각 조각 분리해두고 입력 값에 따라 새롭게 조합을 해줘야 할것이다.




xml DOM의 경우 상속 + 트리(노드자료형) 구조로서 설계 되었다.


타입구분 + 리스트를 단순화 하면 트리 자료구조란걸 떠올리지 못했었다. 


http://translate.google.co.kr/translate?

hl=ko&sl=en&u=http://www.w3schools.com/dom/&prev=/search%3Fq%3Ddocument%2Bobject%2Bmodel%26newwindow%3D1%26espv%3D210%26es_sm%3D93




웹 문서 카테고리


1.css 


2.html , html5 , xml(dom+xslt)


3.java script


4.j query


5.asp(sql+aod), php(sql), jsp(servlet)


아래 사이트의 하단에 카테고리 구분되어 있음(약 한달후쯤 진행? 우선순위 wepService(jsp->servelt->db)->??)

http://translate.google.co.kr/translate?hl=ko&sl=en&u=http://www.w3schools.com/dom/&prev=/search%3Fq%3Ddocument%2Bobject%2Bmodel%26newwindow%3D1%26espv%3D210%26es_sm%3D93

by givingsheart 2014. 1. 1. 15:44

import org.jdom2.Document;

 

푸하하하하하하하하하하하하하ㅏ하하하하하하하하하하하ㅏ하

(완전 하드코딩, 막코딩 였지만.. 대만족 OTL)

 

 

xml파일 로딩을 위해선

javax.xml.parsers 를 연구해야 한다..

 

class documentBuilderFactory

class documentBuilder

class saxParserFactory

class saxParser

... 이것만 파면 가져올수 있다 gogo!!

 

그리고 막코딩한 툴의 설계를 변경할 필요가 있다.

특히 1.테이블 이름 입력 받아서 문자열 파싱 처리

2.쿼리를 체크박스 선택 외에도 텍스트 필드를 통해 입력할수 있게끔 처리(or 체크박스를 선택하면 자동으로 텍스트필드에

쿼리 구문 띄우기)

3.막코딩 전에한 설계대로 툴(프레임) + dbCon정보 입력용(Panel) + dbQuery 정보 입력용(Panel) + load/save 버튼용(Panel)

 =>3번은 툴app의 생성자가 현재 아주 더럽기 때문이고(그냥 메서드로 뺄까;;), 레이 아웃 매니저가 정말 짜증이 나기 때문이다.

(현재는 GridLayout을 사용중이고.. Flow,xxxBag,기타 등등 써봤지만.. 적응이 안된다. java.swing 으로 만들어볼까?

 


내가 하고 싶었던 것은.. 쉬운 쿼리를 만들고, 해당 쿼리들을 관리하기 쉽게 XML등으로 표현해주면.. 다른 사람들이 쓰고

관리하기 쉬울듯 하기 때문이었다. 나는 바른 방향으로 진행하고 있나? AWT 패키지로.. GUI를 구현중인데.. SWING 공부는?

by givingsheart 2014. 1. 1. 15:44

애초엔 구현만 시키자고 만들다가..(svn으로 프로젝트 생성도 안함) 

 

기왕 만들거 내가 공부한것들 적용시켜보자는 욕심에

 

계속 만들고 부수고 하면서 설계를 계속 바꾸다가.. 버전 관리가 안됐다.

 

내 생각의 변화, 고민들.. (enumerte 역시 처음엔 c/c++ 처럼 접근을 했는데.. 실제 사용하다

보니까 클래스 였다) 

(ex) ConfigData.DB_INFO_INDEX.DB_LOGIN_ID.ordinal();   <--요렇게 사용했었음;;

 

계속 같은 소스 파일에서 뒤집어 엎어버리다 보니까 ... 분실했다 ㅠㅠ

 

=>배운점: 간단한 프로그램이라도 svn을 통해 버전 관리를 할것!!!!



(추가)

현재 svn -> 내 로컬에 저장소 만들고 (visual 어쩌고) -> 이클립스에서 커밋,체크아웃 하고있다. 요거.. 익숙해 져야 한다.


(추가)

git를 공부했다. 연동이 안된다. gitHub .. 클라우드상 저장소로.. 요걸 사용하면 좋을듯 하다.

by givingsheart 2014. 1. 1. 15:43

로또 번호(중복 되지 않는 6개짜리 숫자열)

 

예전에 중복 체크할땐

 

for(int i = 0; i<arr.length; i++)

{

    for(int j = i+1; j<arr.length; j++)

    {

        if(arr[i] == arr[j])

            isDuplicate = true;

     }

}

요런 식으로 접근했는데..

 

이걸 풀어서 (배열 이름과 연산자 우선순위는 생략)

if( ([0] != [1] && [0] != [2] && [0] != [3] && [0] != [4] && [0] != [5] ) &&

    ([1] != [2] && [1] != [3] && [1] != [4] && [1] != [5])                     &&

    ([2] != [3] && [2] != [4] && [2] != [5])                                        &&

    ([3] != [4] && [3] != [5])                                                            &&

    ([4] != [5]) )

  {

     isDuplicate = false;

  }

 

요런식으로 하면.. 과연 누가 더 빠를까?? (컴파일러가 첫번째걸 어떻게 최적화 시킬지 궁금)

테스트 GoGo!

 

*****************테스트 결과*******************

(처음엔 milisecond으로 받아봤는데 둘다 0이라서 nanosecon으로 변경 = 백만분의 1초가 단위)

 

첫번째 로직 경과시간:45450
두번째 로직 경과시간:2932

=>결론: 배열 첨자 연산은 cpu레지스터에 올라가 저장되고 다른 연산 없이 비교 연산만 반복해주면

           됨으로 엄청 빠르다??   근데 저따위로 풀어쓰면 ㅠㅠ

 

그만 놀고 공부;;;

 

public class main
{

 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  int[] n = {0,1,2,3,4,5};
  
  //시간 테스트
  A(n);
  
  B(n);
 }

 public static void A(int[] n)
 {
  //시작 시간
  long st = System.nanoTime();
  
  for(int i=0; i< n.length; i++)
  {
   for(int j=i+1; j<n.length; j++)
   {
    if(n[i] == n[j])
    {
     int a = 1;
    }
   }
  }
  
  System.out.println("경과시간:" + (System.nanoTime() - st));
 }
 
 public static void B(int[] n)
 {
  long st = System.nanoTime();

  if( ((n[0] != n[1]) && (n[0] != n[2]) &&(n[0] != n[3]) &&(n[0] != n[4]) && (n[0] != n[5])) && 
   ((n[1] != n[2]) && (n[1] != n[3]) && (n[1] != n[4]) && (n[1] != n[5])) &&
   ((n[2] != n[3]) && (n[2] != n[4]) && (n[2] != n[5])) &&
   ((n[3] != n[4]) && (n[3] != n[5])) && 
   ((n[4] != n[5]))
   )
  {
   int a = 1;
  }
   
  System.out.println("경과시간:" + (System.nanoTime() - st));
 }
}

 

by givingsheart 2014. 1. 1. 15:42

목표:웹 -> db 를 통한 초 간단 회원 관리 프로그램

 

세부목표 1. 빈클래스 만들기

             2. db핸들러 클래스 만들기(현재 여기서 - 사용자가 빈의 종류, 연결 db정보,사용할 쿼리를 입력받아

                config 파일을 만들수 있게 awt를 이용해 간단한 툴을 만들다가.. 괜히 복잡해짐.

             3. 오라클 11에 생성및 연동 성공했고 테이블 스페이스, 테이블도 만들어둠. (오라클 문법에 대한 공부 필요)

                (웹을 통해선 아니지만, 콘솔 창에서 테스트용으로 엔트리 하나 (아뒤,비번,이름) 추가 성공 !!!!!!!!

                   INSERT INTO test1 values('id1','pw1','hon');  happy!!!!)

 

현재 계정:park 비번:111111 테이블 스페이스:park 권한:dba -_-;;  그외 각종 인서트,업데이트등등

                 만들어둔 테이블:test1

                 db이름: park

                 db url: jdbc:oracle:thin:@localhost:1521:park

                 

 

             중요!! 명령문은 대문자로 쓸것! 문자열은 ' ' 로 처리!! 칸 띄우기 조심!!!!

 

?? 테이블 스페이스가 다른데 테이블 명이 중복된다고 나옴 ;;; 기존 테이블 없애야 하나???

//1.테이블 스페이스 변경

//2.해당 테이블 드랍

 

http://onmay.tistory.com/12

 

https://www.linux.co.kr/superuserboard/view.html?code=oracle&id=312&position=&start=380

 

 

http://blog.naver.com/seotaji?Redirect=Log&logNo=80199911545 (앞페이지에 오라클 12c 설치및 계정생성 포함;;)

 

 

 

 컬럼으로 테이블 찾기

 

select TABLE_NAME from ALL_TAB_COLUMNS where COLUMN_NAME='컬럼이름';

 

 

네이버에서 "대용량 데이터베이스솔루션 1 " 책

 

 

(etc) spring

 

http://kekedie.tistory.com/66

by givingsheart 2014. 1. 1. 15:38

http://k.daum.net/qna/openknowledge/view.html?qid=40E32

 

 

내 오라클 계정을 웹을 통해 접근할때 해당 웹페이지 소스코드 -_-;;;;;;

설마.. 저런 노가다가 필요한건 아닐테지.. 분명히 쉽게 만드는 방법이 있을 것이다;;;

by givingsheart 2014. 1. 1. 15:36

eclipse -> windows-> custom perspective 에서 내 맘대로

 

 

이클립스 플러그인 정리

 

http://cafe.naver.com/javachobostudy/32859

by givingsheart 2014. 1. 1. 15:32

코컴2 585p를 보던중 복잡한 if 문 대신 데이터 테이블을 활용하는 기법을 보던중..

 

 

이벤트 = 헤더 + 구체적 데이터

이벤트 헤더 테이블 = 이벤트 헤더 타입(key)에 따른 동작될 리스너들(value)의 집합

 

이벤트 처리

 1.이벤트가 있다면 가져온다.

 2.이벤트의 헤더를 읽는다.

 3.헤더로부터 이벤트의 종류를 해석한다.(열거형 decode)

 4.이벤트 헤더 테이블에서 동작할 연산(리스너)을 찾는다.

 5.해당 리스너를 수행한다.

 

awt 이벤트 멀티 캐스터의 동작과 유사하지 않은가..  위의 이벤트 헤더 테이블이 이벤트 소스 풀인가 머가 하는 개념일테고..

(실제 이벤트 핸들링은.. 옵저버패턴을 통한 콜백, 상속트리를 이용한 템플릿 메소드 패턴, 또 머있엇드라..아.. 리스너 생성자

 에 내가 정의한 리스너 넣어서 재정의 해주는게.. 아.. 그게 뭐였더라.. 데코레이터였나? 글고 내 리스너 재정의할때 편하게

 끔 어댑트 윈도우 리스너 머시기도 있었고 )

 

c에서 콜백용 함수 테이블을 만들어 사용했던걸 본 기억도 있다.(일반적인 메세지 처리에서 콜백형식 = awt.component(윈도

우,다이얼로그등)이 이벤트를 정의하고 클라이언트가 구독하는 방식으로, delegate를 통해 event에 내 메서드를 등록하는

방식이다)

 

 

****************************************************************

아래는 대박 설계?

****************************************************************

class AbstractField

{

   public abstract void readAndPrint(FieldData, FileStatus);
}

 

class FloatingPointField implements AbstractField

{

   protected final void readAndPrint(FieldData, FileStatus)

   {

       sysout(xxx);
    }
}

 

class IntergerField implements AbstractField

{...}

class StringField implements AbstractField

{...}

...

***************

 

 

 

enum FieldType

{

FieldType_FloatingPoint,

FieldType_Integer,

FieldType_String,

...
}

struct FieldData

{

String xxx

xxx xxx

...
}

 

struct FieldDescription

{

   FieldData fieldData;

   FieldType fieldType;
}

 

 

FieldDescription[] fieldDescription = FieldDescription.load(); //임의로

 

AbstractField[] fields = new AbstractField[5]; //매직 넘버는 안되지만 이해의 편의상

 

fields[FIELD_FLOATINGPOINT] = new FloatingPointField();

fields[FIELD_INTEGER] = new IntergerField();

fields[FIELD_STRING] = new StringField();

...

*******************

 

int fieldIndex = 1;

while( (fieldIndex <= numFieldIInMessage) && (fileStatus == OK) )

{

   fieldType = fieldDescription[fieldIndex].fieldType;

   fieldData = fieldDescription[fieldIndex].fieldData;
  

   fields[fieldType].readAndPrint(fieldData , fileStatus);
}

********************

 

반복적으로 볼것!

 

테이블을 이용해 비지니스 로직을 단순화 시키자!!

 

(2013/12/2추가) 아래의 RUBY의 스크립팅 처리 방식이 위와 같이 테이블을 만드는 방식 같다.

*************************************

(ex)

?

1
2
3
4
5
6
7
#ruby
  puts 'What is your name?'
  name = gets
  process_name(name)
  puts 'What is your quest?'
  quest = gets
  process_quest(quest)

 

******************************************

 

********************************************

추가로 0~17 =공통, 18,19,20... 65=개별적  66~?? =공통일때

0~17, 66~?를 하나의 키값으로 사상하는 방법

max( min( 66 , num) , 17)   <--- 아름다운 방법이다.

추가로 18,19,20,..65를 5단위로 쪼개서 사상하고 싶을때

num을 5로 나누고(왜냐하면 몫이 같을테니까) 적절하게 max() , min()을 조합해주면.. 이건 hash의 ?

 

그리고 595p의 인덱스 접근 방식에선 인덱스 테이블및 기타 참조 테이블을 활용해 주 데이터 테이블에 접근하는 효율성을

고찰하는데.. 이건db 테이블및 키값 설계 & select 할때 참조 키 선택에 따른 효율성과 같은 개념 아닌가? ㅎㄷㄷ

*************************

 

데코레이터 vs 스트레티지 패턴의 차이가 명확치 않다. 데코레이터가 생성자를 통해 특정 객체를 받아들이고 그 객체의 메서드를

자신의 메서드 이름으로 사용하는 거였나?  스트레티지도 다른 객체를 받아들여 자신의 행동을 변환시키는 거였고.. (Word , Format)  데코레이터는 메서드 동작을 동적으로 확장시키는 것이었다. 자신의 동작 a에 추가로 자신과 같은 타입의 다른 객체 b의 동작b'을 동적으로 받아서 추가로 사용하는 것 (한마디로 또다시 파생 시킬 필요없이 동작을 확장한다)

 

 

 

체크리스트:테이블을 활용한 기법들

1.복잡한 논리 코드에 대한 대안으로 테이블을 활용한 기법들을 고려해 보았는가

2.복잡한 상속 구조에 대한 대안으로 테이블을 활용한 기법들을 고려해 보았는가

3.코드를 변경하지 않고 데이터를 수정할 수 있도록 테이블의 데이터를 외부에 저장하여 실행시

  읽는 방법을 고려해 보았는가?(스크립트 처리)

4.직관적인 배열 인덱스를 통해서 직접적으로 테이블에 접근할 수 없다면(나이예제), 인덱스

  계산 코드를 코드에 중복하여 작성하는 대신 접근 키 계산 코드를 루틴으로 작성하였는가?

 

 

요점 정리

1.테이블은 복잡한 논리 코드와 상속 구조에 대한 대안을 제공한다. 만약 프로그램의 논리나 상속

  트리가 혼란스럽다고 생각한다면, 참조 테이블을 사용하여 단순화시킬 수 있는지 확인해 본다.

2.테이블을 사용할 때 고려해야 하는 한가지 핵심 사랑은 테이블 접근 방법을 결정하는 것이다.

  여러분은 직접 접근 방식이나 인덱스 접근 방식, 또는 단계적 접근 방식을 사용하여 테이블에 접근할 수 있다.

3.테이블을 사용할 때 고려해야 하는 또 다른 핵심 사항은 테이블에 입력할 내용을 결정하는 것이다.

by givingsheart 2014. 1. 1. 15:31
| 1 ··· 3 4 5 6 7 |