10월, 2018의 게시물 표시

[JAVA / Design Pattern] private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계 하자.

싱글턴은 객체를 하나만 만들 수 있는 클래스이다. 싱글턴은 보통 유일할 수 밖에 없는 시스템 컴포넌트를 나타낸다. 창 관리자(window manager)나 파일 시스템 같은 것들이 싱글턴이다. 그런데 클래스를 싱글턴으로 만들면 클라이언트를 테스트하기가 어려워질 수가 있다. 싱글턴이 어떤 인터페이스를 구현하는 것이 아니면 가짜 구현으로 대체할 수 없기 때문이다. 보통 사람들이 쓰는 싱글턴은 대체로 이렇다 1 2 3 4 5 6 7 public   class  Rule3 {      private   static   final  Rule3 INSTANCE  =   new  Rule3();           public   static  Rule3 getInstance() {          return  INSTANCE;     } } Colored by Color Scripter cs Rule3의 객체를 쓰고자한다면 Rule3.getInstance()만 써주면  Rule3은 객체를 생성하지 않고 INSTANCE변수에 저장되어있는 Rule3을  반환 해주므로 메모리 낭비 없이 항상 같은객체만 생성되게 된다. (public으로 선언된 getInstance()는 정적 팩터리 메서드를 이용한 방법이다.) 하지만 주의할 것이 있는데 AccessibleObject, setAccessible 메소드의 도움을 받아 권한을 흭득한 클라이언트는 리플렉션(reflection) 기능을 통해  또 다른 객체를 만들 수 있다는 것이다. 이런 종류의 공격을 방어하고 싶다면, 두 번째 객체를 생성하라는 요청을 받으면 예외를  던지도록 수정해야한다. (생성자를 private로 해주어도 호출이 되어버린다.) 리플렉션 더 알아보기 앞서 설명한 방법들로 구현한 싱글턴 클래스를 직렬화 가능(Serializable) 클래스로 만들려면 클래스 선언에 implement

백준 10845 - 큐

이미지
package  ex; import  java.util.ArrayList; import  java.util.List; import  java.util. Scanner ; // 한번 지나간건 돌아오지 않음.  //  push  시 커서값으로 변수하나 줘야함  //  /*  *  push X: 정수 X를 큐에 넣는 연산이다. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다. empty: 큐가 비어있으면 1, 아니면 0을 출력한다. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.  */ public   class  BaeJoon10845 {      public   static   void  main( String [] args) {          Scanner  scanner  =   new   Scanner ( System . in );          int  num  =  scanner.nextInt();         scanner.nextLine();          // 큐 생성         QueueAl queue  =   new  QueueAl(num);          int  i  =   0 ;          String  target;          while  (i  <  num) {             target  =  scanner.nextLine();              if  (target.contains( " " )) {                  // 

Mysql 한글깨짐 처리해주기

PHP나 JSP에서 한글이 ???(물음표)로 뜨거나 깨질 때 Mysql 설정을 바꿔보자. mysql에 로그인 해서 1 show variables like 'c%'; cs \ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + --------------------------+------------------------------+ |  Variable_name             |  Value                         | + --------------------------+------------------------------+ |  character_set_client      |  utf8                          | |  character_set_connection  |  utf8                          | |  character_set_database    |  utf8                          | |  character_set_filesystem  |  binary                        | |  character_set_results     |  utf8                          | |  character_set_server      |  utf8                          | |  character_set_system      |  utf8                          | |  character_sets_dir        |   / usr / share / mariadb / charsets /   | |  check_constraint_checks   |   ON               

[Java] 예외처리

이미지
예외처리 예외의 종류와 특징 - Error  java.lang.Error 클래스의 서브클래스 들이다. 에런느 시스템에 뭔가 비정상적인 상황이 발생했을 경우 사용 된다. 그래서 주로 자바 VM에서 발생 시키는 것이고 애플리케이션 코드에서 잡으려고 하면 안된다. OutOfMemoryError나 ThreadDeath같은 에러는 catch 블록으로 잡아봤자 아무런 대응 방법이 없이 때문이다. 따라서 시스템 레벨에서 특별한 작업을 하는 게 아니라면 애플리케이션에서는 이런 에러에 대한 처리는 신경 쓰지 않아도 된다. - Exception과 체크 예외 java.lang.Exception 클래스와 그 서브클래스로 정의되는 예외들은 에러와 달리 개발자들이 만든 애플리케이션 코드의 작업 중에 예외상황이 발생했을 경우에 사용 된다. Exception클래스는 다시 체크 예외 (복구 가능한 오류들 ) 언체크 예외 ( 복구 불가능한 오류들)로 구분 된다.  체크 예외는 Exception 클래스의 서브 클래스 들이면서, RuntimeException 클래스를 상속하지 않은 것들을 말하고,  언체크 예외는 RuntimeException을 상속한 클래스들을 말한다.  일반적으로 예외라고 하면 Exception 클래스 중에 RuntimeException을 상속을 했느냐 안했느냐의 차이로 나누어 진다. 체크 예외를 발생할 수 있는 메소드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 한다. 이를 catch 문으로 잡든지, 다시 throws를 정의해서 메소드 밖으로 던져야 한다. 그렇지 않으면 컴파일 에러가 발생 한다. -RuntimeException과 언체크/런타임  java.lang.RuntimeException 클래스를 상속한 예외들은 명시적인 예외처리를 강제하지 않기 때문에 언체크 예외라고 불리거나 대표 클래스 이름을 따서 런타임 예외라고도 한다.  에러와 마찬가지로 이 런타