2015년 12월 8일 화요일

[Java] Exception Propagation in Chain, 자바 예외처리 체인



[Java] ArrayList



  • Array List - 구현
    • https://opentutorials.org/module/1335/8709

[Java] Object Casting, instanceof operator





[Java] Dynamic Binding


[Java] Instance


[Java] Polymorphism


[Java] Object method - toString(), equals()





[Java] Overriding and Overloading




2015년 11월 5일 목요일

[자바] 객체 지향 디자인 패턴 정리

지은이의 말
  Q. '클래스'가 무엇인가요?
  A. 클래스는 변화의 기본 단위이다.

서문

  1장 - 클래스와 클래스의 관계, UML 클래스다이어그램
모델링, UML, 클래스 다이어그림, 관계
관계의 종류
연관 관계(association)  -  실선 or 화살표
  클래스들이 개념상 서로 연결되어있음(보통 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황일 때)
일반화 관계(generalization)  -  속이 빈 화살표
  상속관계, 한 클래스가 다른 클래스를 포함하는 상위 개념일때 -> IS-A관계
집합 관계(composition, aggregation)
  클래스들 사이의 전체 또는 부분 같은 관계 나타낸다.
의존 관계(dependency)  -  점선 화살표
  한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때를 나타낸다.
연관관계와 차이점 - 이 관계가 한 메서드를 실행하는 동안과 같은 매우 짧은 시간만 유지된다는 점
실체화 관계(realization)  -  상속과 유사하게 빈삼각형을 사용하여 머리에 있는 실선 대신 점선을 사용해 표시

다중성 표시
1  -  just 1
*  -  0 또는 그 이상
0..*  -  0또는 그 이상
1..*  -  1 이상
0..1  -  0 or 1
2..5  -  2 or 3 or 4 or 5
1,2,6  -  1 or 2 or 6
1,3..5  -  1 or 3 or 5
  2장 - 추상화, 캡슐화, 일반화(상속), 다형성

  3장 - SOLID원칙
  4장 - GoF 디자인 패턴 개요
  

2015년 10월 24일 토요일

[하루한단어] 갈치

  • 표준명 : 갈치
  • 학명 : Trichiurus lepturus [동물] 갈치 (어류)
  • 영어명: Cutlass fish
  • 일본명 : 다치우오(タチウオ)
  • 속명 : 칼치, 깔치, 풀치(치어), 빈쟁이

2015년 10월 23일 금요일

[에티카] 제 1부 신에 관하여

제1부
신에 관하여

1부 구성 - 정의 8, 공리 7, 정리 36, 부록

정의

  1. 자기원인
    1. 그것의 본질이 존재를 포함하는 것 또는 그것의 본성이, 존재를 제외하고는, 생각될 수 없는 것
  2. 유(類), 유한
    1. 동일한 본성의 다른 것에 의하여 한정될 수 있는 사물
    2. 본성
    3. 사유
    4. 한정
  3. 실체
    1. 그것의 개념을 형성하기 위하여 다른 것의 개념을 필요로 하지 않는 것.
    2. 독립적 개념, 그자체
  4. 속성
    1. 지각하는 것
  5. 양태
    1. 실체의 변용
    1. 제각기 영원하고 무한한 본질을 표현하는 무한한 속성들로 이루어져있는 실체
    2. 절대적으로 무한한 존재
  6. '자유롭다', '필연적', '강제적'
    1. 자유롭다 - 자신의 본성의 필연성에 의해서만 존재하며, 자기자신에 의해서만 행동하도록 결정되는 것.
    2. 필연적(강제적) - 일정하고 결정된 방식으로 결정하고 작동하도록 다른것에 의하여 결정되는 것.
  7. 영원성
    1. 존재가 영원한 것의 정의로부터만 필연적으로 나온다고 생각되는 한에 있어서, 그 존재 , 그 자체

[하루한단어] 허브(Herb)


허브<herb> 


- 라틴어 'herba' : '풀'
- 허브<herb> : 줄기, 잎, 꽃, 뿌리등 인간에게 유용하게 이용되는 식물의 총칭
- 옛날 용도 : 향신료(1. 잡내 제거 2.소화촉진, 방부, 향균, 강장,소염,식욕증진, 살균, 산화방지 작용)
- 현재 용도 : 생약 정제기술 발달 -> 생약 제조

[System Software] IA32, x64 Calling Convention

 x86(IA32) & x86-64 아키텍처에서 프로시저
호출 규약(Calling Convention)을 조사하고 비교 분석하시오.



  • 함수호출규약(Calling Convention) : 함수를 호출 할 때, 어떤 방식으로 파라미터(인자)를 전달 할 것인지 정한 약속

index

1. x86 Calling Convention list (x86-IA32 and x86-64)
2. x86-IA32 Calling Convention(cdecl, stdcall, fastcall, thiscall) description
3. x86-64 Calling Convention(fastcall) description
4. x86-64 Calling Convention(fastcall) in linux
5. x86-64 Calling Convention(fastcall) in windows
6. 요약
7. Disassembly (호출규약 cdecl, 함수 add1(int a, int b, int c) - return값 a+b+c(3개)
8. Disassembly (IA32 호출규약 fastcall, 함수 add1(int a, int b, int c) - return값 a~f(6개)
9. Disassembly (x86-64 호출규약 cdecl, 함수 add1(int a, int b, int c) - return값 a~h(8개)


1page(클릭 - 원본사진)

2page

3page

4page

5page

6page

7page

8page

9page

10page

2015년 10월 22일 목요일

[에티카] 독서 계획


에티카 - B.스피노자(지음), 황태연(옮김) [비홍출판사] 
G마켓 도서 : http://item2.gmarket.co.kr/Item/DetailView/Item.aspx?goodscode=514314930



  • 2015년 2월에 영풍문고(부산대NC점)에서 구입하였다.
  • 본래 책세상문고에서 발행한 에티카를 구입하기 위해 갔지만, 제고가 없어 다른 책을찾다 비홍출판사에서 발간한 에티카를 발견하게 되었다. 
  • 처음에 25,000원의 가격을 보고 구입을 망설였다. 책의 내용을 잠시 살펴보니 에티카 원본에 가까운 번역서여서 결국 구입을 하게 되었다.

  • 에티카를 블로그에 포스트하게 된 이유
    • 1,2학기를 정신 없이 보내면서 짤막하게 읽고 제대로된 생각의 정리를 할 시간이 없었다.  그래서 포스팅을 하며 생각을 정리하기 위해 블로그에 포스트를 계획하게 되었다.
  • 포스트 계획
    • 이 책이 철학책이며, 비전공자가 접근하기에는 많은 에로사항이 있다.
    • 우선 책의 내용을 충실히 이해하는 방향으로 글을 작성하고 추후에 생각의 정리를 하는 것이 옮다고 생각된다.
    • 책이 총 5부로 구성이 되어있으며, 1달에 1부씩 포스트를 할 것이다. (10월~2월)단 군대 입영일에 따라 계획이 변동 될 수도 있다.

자바 프로그램 - Change The Amount Of Money

1. 요구사항
  • Change the amount of money  into the following format
    • 123456 -> \123,456
    • 123 -> \123
    • 12345678 -> \12,345,678
  • String 타입 사용하지 말고 정수타입 사용할 것.
2. 분석

  • 정수타입 - %, / 연산 사용

3. 디자인
  • 3자리씩 추출하여 배열에 저장 하기 - % 1000  /1000
  • 출력부분은 for문과 + 연산을 통해 구현
4. 프로그램 작성
import java.util.Scanner;

public class Homework2Changetheamountofmoney {

    public static void main(String[] args) { 
     
     Scanner input = new Scanner(System.in);
     System.out.print("Enter the amount of money: ");
     long money = input.nextInt();
     long[] particle = new long[20]; long part = 0;
     int count=1;
     
     part = (long) (money % Math.pow(10,3));
     particle[1]=part;
     while(part!=0){
         money=(long) (money/Math.pow(10,3));
         part = (long) (money % Math.pow(10,3));
         particle[count+1]=part;
         count = count+1;
     }
     
     String dollar="$", result="", comma=",";

  result=result+particle[1];
     for(int i=2;i < count;i++){
       result=particle[i]+comma+result;
     }
     result=dollar+result;
       
     System.out.println(result);
    }
}

5. 생각해보기

  • for(int i=2;i<count;i++)  이 코드부분이 HTML의 형식과 맡지 않는다고 하며 형식이 깨지고 </count> 엘리먼트가 생성된다. 다음에 더 알아보고 포스팅 해볼것.
  • 함수화 시켜보자.
  • long[] 메모리를 더 효율적으로 관리할 방법은 무엇일까?
  • 어떻게 하면 더 좋은 코드를 만들 수 있을까?

자바 프로그램 - Display the hour(시간 표시하기)


1. 요구사항

  1. 12시간 시계를 만들 것. 형식은 아래 그림처럼.





24시간 시계 프로그램 정보


추가 조건 정수형 타입만 사용할 것!!


2. 분석

  • 1)  표준시간대를 사용할 것.
  • mills 부터 시작해 hour까지 %(mod), / (divde), int casting의 관계를 이용할 것.
3. 디자인
  • 1)  함수 설정
    • 함수 타입 - Void 
    • parameter - 정수
4. 프로그램 작성 

(최초 작성일 9.18일)
updata내역

import java.util.Scanner;

public class Homework2CurrentTIme {
 public  static void main(String[] args) {
  long milliseconds;
  long seconds, currentSeconds;
  long minutes, currentMinutes;
  long hours, currentHours;
  
  milliseconds = System.currentTimeMillis();
  seconds = milliseconds / 1000;
  currentSeconds = seconds % 60;

  minutes = seconds / 60;
  currentMinutes = minutes % 60;
  
     hours = minutes / 60;
     
     currentHours = hours % 24;

     System.out.println("GMT Current time is " + currentHours + ":"
       + currentMinutes + ":" + currentSeconds);
     
     Scanner input = new Scanner(System.in);
     System.out.print("Enter the time zone offset to GMT: ");
     int time = input.nextInt();
     
     hours = hours + time;
     
     long ampm = hours / 12;
     if(ampm%2 == 0){
      currentHours = hours % 12;
      System.out.println("The Current time is " + currentHours + ":"
             + currentMinutes + ":" + currentSeconds + "AM"); 
     }
     else{
      currentHours = hours % 12;
      if(currentHours==0){
       currentHours = currentHours + 12;
       System.out.println("The Current time is " + currentHours + ":"
              + currentMinutes + ":" + currentSeconds + "PM"); 
       }
      else{
       System.out.println("The Current time is " + currentHours + ":"
              + currentMinutes + ":" + currentSeconds + "PM"); 
       }
      }
     }  
}
Updata 10.10일 함수화시키기
import java.util.Scanner;

public class Homework2CurrentTIme {
 
 static void TimezoneOffset(){
  
  long seconds, currentSeconds;
  long minutes, currentMinutes;
  long hours, currentHours;
  long milliseconds;
  
  milliseconds = System.currentTimeMillis();
  seconds = milliseconds / 1000;
  currentSeconds = seconds % 60;

  minutes = seconds / 60;
  currentMinutes = minutes % 60;
  
     hours = minutes / 60;
     
     currentHours = hours % 24;

     System.out.println("GMT Current time is " + currentHours + ":"
       + currentMinutes + ":" + currentSeconds);
 
  Scanner input = new Scanner(System.in);
     System.out.print("Enter the time zone offset to GMT: ");
     long time = input.nextInt();
     
     currentHours = currentHours + time;
     
     long ampm = currentHours / 12;
     if(ampm%2 == 0){
      currentHours = currentHours % 12;
      System.out.println("The Current time is " + currentHours + ":"
             + currentMinutes + ":" + currentSeconds + "AM"); 
     }
     else{
      
      currentHours = currentHours % 12;
      if(currentHours==0){
       currentHours = currentHours + 12;
       
       System.out.println("The Current time is " + currentHours + ":"
              + currentMinutes + ":" + currentSeconds + "PM"); 
       }
      else{
       System.out.println("The Current time is " + currentHours + ":"
              + currentMinutes + ":" + currentSeconds + "PM"); 
       }
      }
     }  

 public  static void main(String[] args) {
  TimezoneOffset();
 }
   
}
5. 고찰
1) 함수형대로 바꿔볼 것
2) 클린 코드에 대해 알아보고 클린 코드지향적 프로그램 수정후 다시 업로드.



  • System.currentTimeMillis()에 대해 조사
  • [세상을 뒤흔든 프로그래머들의 비밀]

    [세상을 뒤흔든 프로그래머들의 비밀] 
    
    책을 읽은 동기 - 컴퓨터관련 실무작업이 궁금하여 이 책을 읽게 되었다.
    블로그에 글을 작성하게 된 원인
    1. 블로그에 글을 작성하며, 책에 대한 이해와 공감의 수준을 높이기 위함.
     현 프로그래머들의 이야기를 읽으며 무지의 한계로 이해를 하거나 공감을 하기 어려웠다.
    블로그 포스트 계획
    1. 14개의 인터뷰를 1주에 2개씩 포스팅7주 : 10월 4째주 부터 ~  12월 1째주
    글 작성 방향
    1. 책 내용 요약
    2. 용어 정리