티스토리 뷰

Languages

Java 배열복사, Wrapper 클래스 등

Korean Eagle 2021. 1. 30. 00:00
728x90

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가 중요한 경우는 예전의 라이브러리를 사용하는 것이 안전하다.

728x90

'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
댓글