목록삶../프로그래밍 (41)
오늘이군
Java는 안정적으로 변화해 왔습니다. 항상 하위 호환을 지키며 OOP에 대한 고민만 하면 될 것으로 보였습니다. 하지만 Java 버전이 8이 되면서 많은 변화가 생겼는데요, 한번 알아보겠습니다. 가장 큰 특성은 First Class Function 입니다. function 자바에서는 method 인데요 method 를 일급값(First Class Citizen) 으로 사용 할 수 있다는 것입니다. 1. method 를 파라미터로 사용 할 수 있습니다. 2. method 를 리턴값으로 받을 수 있습니다. 3. method 를 Data Structure에 저장하거나 변수에 할당 할 수 있습니다. 두번째 Functional Interface 입니다. Java Language Specification의 설명을..
자바에는 int, long 와 같은 기본형 타입(Primitive type) 이 있고, 그 기본형을 Wrapping 한 Wrapper Class 가 있습니다.결론적으로 얘기하면 기본형 타입 연산이 빠릅니다.예전에는 long 타입끼리만 연산이 가능했지만 JDK1.5 버전부터 부터는 auto(un)boxing 을 지원하게 되었습니다. 개발하기는 편해졌지만 별 생각없이 개발하다보면 큰 성능 이슈를 발생시키게 됩니다.Long sum = 0L; for(long i = 0; i < Integer.MAX_VALUE; i++) { sum += i; }와 같이 개발하면 안된다는 얘기 입니다. Boxing, UnBoxing 이 일어나지 않게 개발해야 합니다.이것이 얼마나 속도 차이가 나는지 코드로 보겠습니다. 아래 내용처..
자바에서 문자열 처리를 할 때 무심코 String name = "홍" + "길동"; 라는 코드를 작성합니다. 예전에 어디선가 StringBuffer 를 사용하라는 얘기를 들었지만 일일이 append 하는 것도 귀찮고 toString() 도 해야 하는 것이 번거롭다는 생각이 들어 더하기 연산을 해버리는 데요, 이게 문제가 있습니다.String 은 불변(immutable) 객체 입니다.예를 들면, str = str + "ab"; 은 100번 주소에 객체가 만들어지지만 다시 str 을 변경하려는 시도를 하면 불변 객체 이므로 새롭게 150 번 주소에 생성을 합니다. 그럼 남은 100번은 어떻게 될까요?네, GC 대상이 됩니다. 무심코 코드를 이렇게 작성하다보면 불필요한 객체가 많이 생겨서 GC 가 빈번히 발생..
참고 https://youtu.be/6Iq5iMCVsXA http://ledgku.tistory.com/33 복잡도 시간 복잡도(time complexity) : 어떠한 연산을 수행하면서 사용한 시간을 나타낸다 공간 복잡도(space complexity) : 사용한 메모리의 사용량 복잡도는 보통 빅오(대문자 O) 표기법을 사용하며, 알고리즘 평가 사이트는 빅오 표기법으로 기준을 제시하고 최악의 경우로 평가 한다. 그리고 시간 복잡도가 괜찮으면 공간 복잡도는 어느정도 봐주는 경향이 있다. time complexity 배열에서 특정 원소를 찾는 경우 O(1) 인덱스로 바로 찾는 경우 int result = numbers[0]; O(n) for 문 한번 돌려서 찾는 경우 for(int num : numbers..
※ 추천 글 https://youtu.be/hFXkjZthuzU https://www.youtube.com/watch?v=VjbBGjVRxfk 1. TDD (Test Driven Development) 테스트 코드를 먼저 작성하고 테스트를 통과시키는 수준에서만 개발하고 테스트 케이스를 추가하면서 점차 확장시켜서 나가는 방법 2. 필요성 충분한 테스트 케이스가 있어야 리팩토링이 가능하다. 리팩토링 (Re + Factor + ing) : 공장 팩토리가 아니라 프로그램을 분해하고 재 조립하면서 코드 품질을 향상시키는 것.
※ 추천 글 https://www.youtube.com/watch?v=N3NSISzolSw https://www.youtube.com/user/egoing2/search?query=%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5 http://andoli.tistory.com/87 http://scroogy.tistory.com/40 ※ 추천 책 DDD START! - 최범균 도메인 주도 설계 - 에릭 에반스 (보고 있는데 너무 어렵네요ㅠ) ※ 확인 중 http://tbang.tistory.com/104 1. 객체화 public static void main(String[] args) { int left, right; // 연산1 left = 10; right = 20; sum(left,..
※ 추천 글 http://www.ojtkorea.com/e-learning/uml/05.html 1. Sequence Diagram 시간의 흐름에 따른 객체들간의 상호작용을 표현한다. 2. 구성요소 가. 객체 (object) : 특정 작업에 참여하는 클래스의 인스턴스 나. 메시지 : object 가 가지고 있는 operation 호출 (객체들이 특정 작업을 수행하기 위해 주고받는 정보들) 다. 시간 3. 작성요령 클래스 다이어그램을 먼저 잘 그려야 겠.... 클래스와 엔티티 > 분석단계에서는 분석클래스모델 (경계, 제어, 엔티티) 를 그리고 설계단계에서는 엔티티는 엔티티별로 경계 제어 클래스는 시퀀스 다이어그램으로 푸는..
※ 추천 글 http://hongjinhyeon.tistory.com/25 주의 : 스타크래프트 게임을 모르면.. 와 닿지 않을 수도 있습니다. http://mydevnote.tistory.com/144 http://blog.naver.com/gangi000/20007183670 1. 클래스 다이어그램 시스템의 논리적인 구조 (클래스) 를 표현한다. 다른 엔터티들(사람, 제품, 데이터)이 서로 어떻게 관계를 맺고 있는지를 표현한다. 정적 구조라고 할 수 있다. 요구사항에 표현된 작업. 즉, 시스템이 처리해야 하는 작업에 대한 책임을 분할 한 것이다. 2. 작성 tip 요구 분석 시에는 요구사항에 맞게 개념적으로 클래스 수준에서 작성한다. 설계 시 멤버변수, 메서드 단위로 확장하여 구현가능하게 작성한다. ..