티스토리 뷰
1. Math.random() vs java.util.Random
1-1 사실 둘 모두 동일하다. Math.random() 함수가 내부적으로 java.util.Random 클래스를 사용한다.
2. 배열 복사
2-1 System.arraycopy(복사대상 배열, 시작 인덱스, 복제 배열, 시작 인덱스, 복사할 개수)
2-2 arraycopy는 swallow copy이기 때문에 primitive type만 복사하는 것이 편리하다.
2-3 for 루프로 각각 복사할 필요가 없다. 사실 stream을 사용하면 간단하게 복사 가능하다.
3. design by contract
3-1 Bertrand Meyer의 오래된 객체지향 설계컨셉이다. 97년 Object-Oriented Software Construction 2판에 수록됨
3-2 Brad Cox의 86년 Object-Oriented Programming: An Evolutionary Approach에 producer, consumer가 등장
3-2-1 producer는 서비스를 제공하는 클래스의 책임을 가지고 있고,
3-2-2 consumer는 서비스를 사용하는 측의 책임을 가진다.
3-2-3 책임이라는 것은 각각의 위치에서 계약으로 설정된 것으로 간주할 수 있는 부분이다.
3-2-3-1 만일, stack을 생각하면 consumer에서 pop을 할 때 반드시 stack이 비어있는지를 확인해야 한다.
3-2-3-2 producer의 책임은 pop이 실행된 후 내부적인 상태값을 변경하는 것이다. 즉 총 저장개수가 1 줄어야 한다.
3-2-4 즉 각각의 파트에서 contract라고 할 수 있는 기본적인 책임을 다 해야만 정상적으로 동작한다.
3-2-4-1 자바의 Stack 클래스 소스를 보면 pop할 때 stack이 비었는지 확인하지 않고 비었을 경우 예외가 발생한다.
3-3 자바의 기본 설계가 design by contract를 기반하기 때문에 consumer의 책임을 명확하게 아는 것이 중요하다.
3-3-1 이런 책임에 대한 부분은 주석에 많이 적혀져 있다.
4. Primitive Type은 각각 Wrapping 클래스를 가지고 있다.
4-1 이전에는 Wrapping 클래스를 생성할 때는 new Integer(10) 이런 식으로 생성했지만, 지금은 valueOf를 권장한다.
4-1-1 Integer.valueOf(10) 이런 식으로 하면 Integer 객체가 반환된다.
4-2 예전엔 String을 숫자 primitive로 변환할 때 (new Integer(str)).intValue()를 사용했지만 parseInt를 권장한다.
4-2-1 Integer.parseInt(str) 이나 Double.parseDouble(str) 를 사용하면 primitive type이 반환된다.
5. JDK 1.2에서 Vector와 StringBuffer는 유사한 기능을 가진 ArrayList, StringBuilder로 변경되었다. thread-safety 차이다.
5-1 Java Collections framework가 JDK1.2에서 도입되면서 생성된 라이브러리는 모두 thread safe 하지 않다.
5-2 대신 synchronized가 없기 때문에 속도가 훨씬 빠르다.
5-3 concurrency가 중요한 경우는 예전의 라이브러리를 사용하는 것이 안전하다.
'Languages' 카테고리의 다른 글
JavaScript : 기본적인 내용2 (0) | 2021.02.24 |
---|---|
JavaScript : 기본적인 내용 (0) | 2021.02.23 |
Java : Optional (0) | 2020.07.28 |
Java 2. main 메소드 (0) | 2020.07.06 |
Java 1. 기본 (0) | 2020.07.06 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- 매핑
- MYSQL
- 설정
- Security
- XML
- jsp
- 하이버네이트
- 자바
- 외부파일
- 스프링
- one-to-many
- 스프링부트
- crud
- Rest
- 상속
- mapping
- Validation
- Angular
- 설정하기
- login
- RestTemplate
- Spring
- one-to-one
- 로그인
- hibernate
- form
- Spring Security
- spring boot
- Many-To-Many
- WebMvc