00187 20151207 자바 GoF 디자인패턴 수업 1일차 - AngryQA/blog GitHub Wiki
자바 GoF 디자인패턴 수업 1일차
AngryQA | 2015-12-07 월요일 오후 2:46 | IT/개발전반 | 원본
오픈소스나 셀레니윰할때 도움이 될 것 같네요..
최근기술에 적용이 많이 된다고하니,,
자바는 1.7 이전과 1.8 이후가 많이 다른듯
안드로이드는 1.7
1. 메모리관리에 관한
자바는 강한 참조.... 그래서 아웃오브메모리발생
그래서 위크랑 소프트 레퍼런스라는것이 있음
2. 객체생성에 관한
생성자의 한계
오버로딩에 한계가 있다.
생성자이름은 = 클래스 이름이라 어떤건지 구분하기 어려움
그래서 new 말고도 방법을 제공하는데
그래서 정적 팩토리 메소드라는게 있음
정의 : 객체를 생성할떄 생성자가 아닌 정적 메소드로 생성
생성자를 private로 만들고 pubic static 객체이름 메소드이름
장점 : 메모리 낭비도 적어지네...생성자이름을 다르게 할수 있으니 기능도 구분이 되고.. 등등등
단점 : 상속을 통해 기능변경이나 확장 불가, 이름짓기!
불필요한 객체생성을 막을때가 많다
불필요한객체생성은 위험함 실행속도가 김
3. 싱글톤
개념 : 하나의 인스턴스만 생성되는 클래스
장점 : 어디에서든 동일한 방법으로 싱글톤 객체의 인스턴스를 쉽게 참조할수 있다
단점 : 객체와 객체간의 결합도가 높아진다.
**단위테스트 하는것이 힘들다 왜냐면 전역 변수,메소드같은 느낌이라 다른 메소드에 영향을 끼칠수도 있기 때문이다. **
ㅁ 직렬화랑 리플렉션에 뚫리기 쉬움... 그래서 조슈아블로크가 제안한 enum 싱글톤이 있음..
지연된 초기화(미리 만들면 자원 많이 차지해!)
그결과 멀티쓰레드에대한 안전성이 떨어짐
엄격한 동기화 , DCLP, IODH
정적 함수 선언시에는 순서가 중요하다....
자바7 캘린더,date는 되게 안좋은 이유가 많다!!
자바8 date새로 구현된거 좋음 자바7이전엔 JODA API활용하면 좋다.
오늘은 메모리관련, 내일은 객체
Comments
단위 테스트 불가능
단위테스트를 할 경우, 각각의 테스트 함수는 다른 테스트 함수와는 독립적이어야한다. test_foo(), test_bar() 라는 단위테스트 함수가 있는데 test_foo()의 성공/실패 여부가 test_bar()의 결과에는 영향을 주면 안된다. 근데 싱글턴은 프로그램안에 단 1개 존재하는 물건이다. 그렇다면 싱글턴과 단위테스트를 조합하면 무엇이 문제인가?
단위테스트의 SetUp/TearDown 함수에 Singleton의 생성/소멸 함수를 일일이 넣어줘야한다. 왜냐하면 싱글턴은 시스템상에 1개만 존재하는 객체이기 떄문에 테스트 함수 안에서 그냥 객체 생성하듯이 만드는게 불가능하기 떄문이다.
게다가 테스트함수 안에서 호출되는 실제 기능의 함수 중 일부가 OtherSingleton::GetInstance()를 호출해버리면 나는 A싱글턴을 테스트하고 있는데 뜬금없이 B싱글턴이 생성되어버려서 이후의 테스트에 어떤영향을 끼칠지 알 수 없다. 내 경우에 이를 다음과 같이 싱글턴을 일반 객체로 만들고 싱글턴과 관련된 내용을 미리 초기화해서 유닛테스트를 수행했다.
일원동 너구리 | 2015-12-08 화요일 오전 10:54
--