블로그   태그   위치로그   이웃로그   방명록
          
 
 
05-06 21:47
 
 
     
 
  Java 에 해당되는 글 7
2013.08.13   안드로이드 점수에 따른 윤곽선 원 그래프 그리기 Android Circular Outline Graph 
2013.04.10   싱글톤 패턴 Singleton Pattern 
2013.04.03   코딩 스타일 관례 (Windows) Coding Style Conventions 
2013.04.03   변수 i,j,k의 역사 The origin of variables i,j,k. 
2013.04.03   헝가리안 표기법 Hungarian Notation 
2013.04.03   캐멀케이스와 파스칼케이스 camelCase / PascalCase 
2013.04.02   Cannot make a static reference to the non-static field count 
  안드로이드 점수에 따른 윤곽선 원 그래프 그리기 Android Circular Outline Graph  +   [Java]   |  2013. 8. 13. 00:31


onDraw 메소드에서 위의 그림과 같이 점수에 따른 원의 외곽선 그래프를 그려보자.




    @Override

    protected void onDraw(Canvas canvas){
        final float ZERO = -90f; //drawAcr를 이용하면 오른쪽이 0도가 된다. 일반적으로 가장 위를 0으로 보기 때문에 - 90도를 해준다.
        final float DOTONE = 72f; //이 소스에서는 5점이 만점이기 때문에 360/5를 해서 1점당 72도를 준다.
        float score = 3.8f; //점수. 하드코딩으로 넣었지만 나중에 변경 예정
       
        float degree = score * DOTONE;
       
        Paint p = new Paint(); //페인트 객체 p 생성
        p.setAntiAlias(true); //윤곽에 안티알리아싱을 처리해서 부드럽게 할건지 설정
        p.setStyle(Paint.Style.STROKE); //원의 윤곽선만 그리는 페인트 스타일
        p.setStrokeWidth(5); //윤곽선의 두께
        p.setAlpha(0x00); //배경 원의 투명도. 이 부분을 00으로 투명하게 처리하지 않으면 배경 원과 점수의 원이 다 보인다.

        RectF rectF = new RectF(100, 100, 400, 400); //사각형 객체 rectF를 생성하며 점수 원의 크기를 사각형으로 보고 (좌, 상, 우, 하) 좌표 설정. 좌상이 기준이 된다.

        if( a < 2 ) {
            p.setColor(Color.RED);
        }
        else if( a < 3 ) {
            p.setColor(Color.YELLOW);
        }
        else if( a < 4 ) {
            p.setColor(Color.BLUE);
        }
        else if( a <= 5 ) {
            p.setColor(Color.GREEN);
        } //점수에 맞춰 점수 원의 색을 변경한다.
       
        canvas.drawArc (rectF, ZERO, degree, false, p);  //점수 원(호)를 그리는 메소드. (정사각형 객체, 시작각도, 끝각도, 시작각도와 끝 각도에서의 중앙으로 선을 그을것이냐, 사용할 페인트 객체). 각도는 시계방향으로 증가한다.


완성하면 다음과 같은 모양이 된다.





 
  
  싱글톤 패턴 Singleton Pattern  +   [Java]   |  2013. 4. 10. 10:51

소프트웨어 공학에서 싱글톤 패턴이란 하나의 클래스가 오직 하나의 오브젝트만 생성하고, 이것을 전역적으로 접근할 수 있게 하는 디자인 패턴이다. 이는 전체 프로그램에서 오브젝트가 오직 하나만 생성되어야 하는 경우에 사용한다.


이전부터 개발자들에게 간간히 쓰여졌는데, 폭발적으로 알려지게 된 계기는 이른바 GoF, Gang of Four라고 알려진 책 Design Patterns: Elements of Reusable Object-Oriented Software을 통해 사람들에게 널리 알려졌기 때문이다.


자바에선 일반적으로 두가지 방법이 사용된다.



게으른 초기화 Lazy initialization


public class SingletonDemo { private static SingletonDemo instance = null; // =null은 생략해도 무관. 싱글톤 데모 클래스에 대해 레퍼런스 변수만 선언 private SingletonDemo() {} //private 생성자를 만들어서 다른곳에서 객체를 생성하지 못하게 한다. public static SingletonDemo getInstance() { //public getInstance 메소드로 다른곳에서 접근 가능하게 만든다. if (instance == null) {                     instance = new SingletonDemo (); 싱글톤 객체 생성 } return instance; } }




이경우 멀티쓰레드 프로그램에서 두 개 이상의 쓰레드가 같은 클래스를 참조할 때 문제가 되기 때문에 Double Checked Locking을 사용하여 인스턴스가 생성되었는지 확인 후 생성되어있지 않을 때 동기화한다.


public class SingletonDemo {
        private static volatile SingletonDemo instance = null;
 
        private SingletonDemo() {       }
 
        public static SingletonDemo getInstance() {
                if (instance == null) {
                        synchronized (SingletonDemo .class){
                                if (instance == null) {
                                        instance = new SingletonDemo ();
                                }
                      }
                }
                return instance;
        }
}






부지런한 초기화 Eager initialization

번역은 임의로 하였으며 이것이 표준적으로 사용되는 말은 아니다

부지런한 초기화는 프로그램이 항상 인스턴스가 필요할 때나 인스턴스를 생성하는 비용이나 시간이 크지 않을 때 사용한다.



public class Singleton { private static final Singleton instance = new Singleton(); //레퍼런스 변수 선언과 동시에 인스턴스 생성 private Singleton() {} //생성자 지정으로 다른 클래스에서 객체 생성을 막음 public static Singleton getInstance() { //getInstance로 전역적인 접촉점 제공 return instance; } }



그 외 Static block initialization, The solution of Bill pugh, Enum way등이 있지만 다루지 않는다.





 
  
  코딩 스타일 관례 (Windows) Coding Style Conventions  +   [Java]   |  2013. 4. 3. 01:52

MSDN 번역 http://msdn.microsoft.com/en-us/library/aa378932%28VS.85%29.aspx


코딩 스타일 관례는 명확성과 일관성을 위해 사용되는 샘플 목록들이다. "헝가리안" 표기법이 사용된다. 이러한 관례는 Win32 프로그래밍에 일반적으로 사용되었다. 이 방법은 변수의 타입을 고려해 변수의 이름을 정할 때 사용되는 접두사를 포함한다.


다음 표는 일반적으로 사용되는 접두사(prefix)들이다.



 접두사

설명

 a

배열 array

 b

 BOOL (int)

 c

 Char

 cb

 Count of bytes

 cr

컬러 참조 값 Color reference value

 cx

 Count of x (short)

 dw

 DWORD (unsigned long)

 f

 Flags (일반적인 다중 비트 값)

 fn

 함수 Function

 g_

 전역 Global

 h

 핸들 Handle

 i

 정수형 integer

 l

 Long

 lp

 Long pointer

 m_

 클래스의 데이터 멤버 Data member of a class

 n

 Short int

 p

 Pointer

 s

 String

 sz

 Zero terminated String

 tm

 Text metric

 u

 Unsigned int

ul

 Unsigned long (ULONG)

 w

 WORD (unsigned short)

 x,y

 x, y 좌표 (short)


이러한 것들은 종종 혼합 사용되곤 하는데, 그 예를 들면 다음과 같다.




혼합된 접두사

설명

 pszMyString

 스트링을 지시하는 포인터

 m_pszMyString

 클래스의 데이터 멤버인 스트링을 지시하는 포인터



작성중///









 
  
  변수 i,j,k의 역사 The origin of variables i,j,k.  +   [Java]   |  2013. 4. 3. 01:20

흔히 반복문에서 임시 변수로 많이 사용하는 i,j,k는 포트란에서 비롯되었다.


수학에서 합 공식(Σ)이나 기타 고등수학에서 변수를 설명할 때 i,j,k를 사용하였고, 포트란을 설계한 사람들은 수학과 같은 방법을 사용하여 언어를 디자인하였다.


포트란에서 'I'부터 'N'까지로 시작하는 단어는 기본적으로 정수형이 되었고, 그 외의 단어로 변수를 만들면 기본값으로 실수형이었다. 사람들은 이러한 방법을 잊지 못했고 이로인해 다음과 같은 농담이 생겨났다.


God is real unless declared integer

신은 실수다(실제한다). 정수형으로 선언되기 전까지만


사족을 달자면 God로 변수를 선언하면 G로 시작하는 변수기 때문에 실수형이었고, 이를 정수형으로 쓰고싶으면 따로 정수형으로 선언해 주어야 했다.




 
  
  헝가리안 표기법 Hungarian Notation  +   [Java]   |  2013. 4. 3. 01:05

헝가리안 표기법은 프로그래밍에서 식별자(Identifier)의 이름을 붙이는 규칙으로 시스템 헝가리안과 앱스 헝가리안 두가지로 나뉜다.


앱스 헝가리안(Apps Hungarian)은 원조(!)헝가리안 표기법이며 제록스 PARC에서 일했고 차후 마이크로소프트 치프 아키텍트가 된 프로그래머 Charles Simonyi에 의해 개발되었다. 변수의 첫글자는 그 변수의 타입에 따라 사용하는 것으로 포트란의 변수 이름은 I부터N까지 기


헝가리안 표기법은 언어 독립적이며 최초로 대중적으로 사용된 것은 BCPL 프로그래밍 언어이다. 그 이유는 BCPL은 다른 기계언어와 비교해 데이터타입이 없었으며, 따라서 프로그래머는 변수의 타입을 기억해야했기 때문이다.


헝가리안 표기법은 변수의 



임시저장//


 
  
  캐멀케이스와 파스칼케이스 camelCase / PascalCase  +   [Java]   |  2013. 4. 3. 00:22




PascalCase: BackColor처럼 연결된 단어의 첫 글자는 대문자로 표기해야한다.


camelCase: backColor처럼 연결된 단어의 첫 글자는 소문자로, 이후 연결된 단어들의 첫 글자는 대문자로 표기한다.


Uppercase: System.IO나 System.Web.UI처럼 2글자 이하인 식별자(Identifier)를 전부 대문자로 쓴다.



camelCase의 종류는 Upper와 Lower가 있으며 Upper Camel Case(UCC)는 파스칼케이스라고도 불린다. Lower는 (LCC) 그냥 캐멀케이스이다.


컴퓨터 프로그래밍에서는 식별자의 이름을 붙이는데 사용되었는데, 일반적인 경우 식별자는 띄어쓰기를 사용할 수 없고 마이너스(-)또한 빼기로 취급되어 사용할 수 없었기 때문에 언더바(_)를 사용하거나(스네이크 케이스snake_case라고도 한다) camelcase처럼 직접적으로 소문자 단어들을 연결했다. 하지만 이렇게 직접 단어들을 연결하자 가독성이 떨어졌고, 후속 단어를 대문자로 쓰기 시작했다.


 
  
  Cannot make a static reference to the non-static field count  +   [Java]   |  2013. 4. 2. 15:58


자료 구조와 JAVA

이석호 저, 정익사


프로그램 1.1

public class JavaOne {
    int count = 1;


    public static void main(String[] args) {
        System.out.println("This count is: " + count);
    }
}


??? 예제코드에는 JavaOne에 count를 선언하고 정의하라고 되어있는데 해보면 스태틱 클래스 (main)밖의 것을 참조할 수 없다고 에러가 난다.

고치려면? count를 클래스의 객체로 만들거나 static int count로 선언해야한다!!!
왜? static 멤버들이 먼저 컴파일되면서 비스태틱 멤버인 count가 정의되지 않았기 때문.(http://enjoyjava.tistory.com/7)


솔루션 1. 참조하려는 것을 전부 스태틱으로 바꾼다.


public class JavaOne {
    static int count = 1;
    public static void main(String[] args) {
        System.out.println("this count is: " + count);
    }
}



솔루션 2. 클래스로 만들어서 객체를 생성한다.


public class JavaOne {
    int count;

    public static void main(String[] args) {
        JavaOne a = new JavaOne();
        a.count = 1;
        System.out.println("this count is: " + a.count);
    }
}



 
  
 
 
<<이전   | 1 |   다음>>
 

데드캣's Blog is powered by Daum & tistory