거꾸로 바라본 세상
규칙 2. 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라
Language/Java 2017. 1. 19. 16:32

규칙2. 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라 정적 팩터리나 생성자의 문제- 선택적 인자가 많은 상황에 잘 적응하지 못하다는 것 프로그래머들은 보통 점층적 생성자 패턴(telescoping constructor pattern)을 적용- 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는 생성자를 추가하고, 거기에 두 개의 선택적 인자를 받는 생성자를 추가하는 식으로 생성자들을 쌓아 올리듯 추가하는 것.결국 모든 선택적 인자를 다 받는 생성자를 추가하면 정의는 끝나게됨.ex)1234567891011121314151617181920212223242526272829//점층적 생성자 패턴 - 더 많은 인자 개수에 잘 적응하지 못한다. public class Nutritio..

규칙 1. 생성자대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라
Language/Java 2017. 1. 19. 15:18

규칙 1. 생성자대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라 클래스를 통해 객체를 만드는 일반적인 방법- public으로 선언된 생성자(constructor) 다른 방법클래스에 public으로 선언된 정적 팩터리 메서드(static factory method)를 추가하는 것.Ex)_Boolean 클래스의 valueOf 정적 팩터리 메서드의 장점 1. 생성자와는 달리 정적 팩터리 메서드에는 이름(name)이 있다.- 생성자에 전달되는 인자(parameter)들은 어떤 객체가 생성되는지를 설명하지 못함.- 정적 팩터리 메서드는 이름을 잘 짓기만하면 사용하기 쉽고, 클라이언트 코드의 가독성(readability)도 높아짐- 클래스에는 시그니처(signature)별로 하나의 생성자만 넣을 수 있는데..

[병렬처리]2. 스레드의 안전성
Language/Java 2016. 12. 12. 11:13

2. 스레드의 안전성 도입 2-0-1. 스레드 안전(Thread Safety) - 멀티 스레드 프로그래밍에서 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에는 문제가 없음을 말한다. ex) 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행결과가 올바르게 출력되는 것. - 병렬 프로그램에서 단순히 스레드와 락(Lock)만 신경 써서 해결되지 않는다. 스레드와 락은 병렬 프로그램을 올바르게 잘 사용하기 위한 도구일 뿐이다. 2-0-2. 스레드에 안전한 코드를 작성하는 방법 - 공유되고 변경할 수 있는 스레드의 상태에 대한 접근을 관리하는 것 2-0-3. 객체의 상태 - 인..

String 보다는 StringBuilder, StringBuffer를 사용해야하는 이유.
Language/Java 2016. 10. 7. 18:01

String 보다는 StringBuilder, StringBuffer를 사용해야하는 이유. 이유는 간단하다. String보다는 Stringbuilder 와 StringBuffer이 성능ㅇ ㅣ좋으므로.. 1. StringBuilder와 StringBuffer을 사용시 append 를 이용할 때 하지 말 것String str ="abcde";String a = new String();StringBuffer sb= new StringBuffer();StringBuilder sbs = new StringBuilder();long start = System.currentTimeMillis();for(int i=0; i

Java static 키워드
Language/Java 2016. 8. 11. 16:20

Java static 키워드 - static은 '정적인, 움직이지 않는다'라는 뜻으로 메모리에 고정된다. 그래서 모든 인스턴스에 접근할 수 있도록 공유가되고 클래스 차원에서 정의된 필드 하여 'class field'라고 한다. 그러므로 static 키워드를 이요하면 객체를 생성하지 않고도 변수나 함수를 사용할 수 있다. - static area는 클래스가 메모리에 로딩되면서 static도 같이 올라가고, 프로그램이 종료되면 JVM에서 해당 메모리를 반환한다. - static은 메모리할당이 한 번만 이루어진다. static 키워드의 사용범위 1. 모든 인스턴스에 공통적으로 사용해야 할 경우 static을 붙인다.- 인스턴스를 생성하면, 서로 독립적이기 때문에 서로 다른 값을 유지하므로 각 인스턴스들이 공통..

java final 키워드
Language/Java 2016. 8. 11. 14:08

final 키워드 - final 키워드는 주로 class 나 method 의 override를 막기위해 사용- 맴버변수, 로컬변수는 변수 초기화 이후 바꿀수 없는 변수를 만드는 용도로 사용 1. 클래스에서 final 사용ex_) A 클래스에서 final 사용시 B 클래스는 A클래스를 상속을 할 수 없다. public final final A {}public class B extends A { } (X 상속불가) 2. 메서드에서 final 사용ex_) A클래스의 a()메서드에 final키워드 입력하고, B클래스에서 A클래스를 상속한 후 a()메서드를 오버라이드 할 수 없다.\public class A { public final void a() { } }public class B extends A { pub..

쓰레드
Language/Java 2016. 5. 25. 13:57

동시성 : 하나의 코어에서 멀티 스레드를 번갈아가며 수행하는 성질병렬성 : 멀티 코어에서 개별 스레드를 동시에 실행하는 성질 동기화(Synchronized)-싱글 스레드 프로그램에서는 한 개의 스레드 객체를 독차지해서 사용하면 되지만, 멀티 스레드는 스레드들이 객체를 공유해서 작업해야할 경우가 있다.이 경우, A를 사용하던 객체가 B에 의해 상태가 변경될 수 있기 때문에 A가 의도했던 것과 다른 결과를 얻을 수 있다.그래서 스레드가 사용중인 객체를 다른 스레드가 변경할 수 없도록 하려면 스레드 작업이 끝날 때까지 객체에 lock을 걸어서 다른 스레드가 사용할 수 없도록 해야한다. 멀티 스레드 프로그램에서 단 하나의 스레드만 실행하도록 할 수 있는 영역을 임계영역(Critical section)이라고 한다..

article thumbnail
[JavaScript]브라우저명과 모바일, PC브라우저 체크
Language/Javascript 2016. 4. 14. 15:51

1. 모바일 브라우저라면 모바일 브라우라우저라고 출력하고 PC브라우저라면 PC브라우저라고 출력하기.2. 브라우저 종류 출력하기 broswerChk.js 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455var broswer = {}; broswer.isMobile = function() { var tempUser = navigator.userAgent; var isMobile = false; // userAgent 값에 iPhone, iPad, ipot, Android 라는 문자열이 하나라도 존재한다면 모바일로 간주됨. if (tempUser.indexOf("iPhone") ..

article thumbnail
[JavaScript] 5자리 인증번호 만들기
Language/Javascript 2016. 4. 11. 17:46

0~9까지 다섯자리 인증번호 만들기 javaScript 소스 rand.js1234567891011121314151617var randomNum = {};//0~9까지의 난수randomNum.random = function(n1, n2) { return parseInt(Math.random() * (n2 -n1 +1)) + n1;};//인증번호를 뽑을 난수 입력 n 5이면 5자리randomNum.authNo= function(n) { var value = ""; for(var i=0; i