[우아한테크코스] 3일차 TIL

1 minute read

오늘 배운 것

  1. 자바 기본 문법

TIL

자바 기본 문법

  1. package와 import 패키지명만 보더라도 어떤게 있겠구나 할 수 있도록 관리하는 것. 배포할 때 소스 코드들을 묶어서 재사용하고 빌드가 빠르게 한다.
    디렉토리 구조 = 패키지 구조이고 패키지 구현은 src/test/java, src/main/java 로 하고 package ; 로 선언하고 한다.
    패키지 convention: 회사 도메인명을 사용한다. 소문자이고, java와 javax는 사용하면 안된다.
    Import의 구현 생성한 패키지 내의 클래스를 임포트해서 사용한다. 그럼 소스코드에서 클래스명만 사용하면 된다. String, Integer 같은 거는 이미 선언되어 있다.
    웬만하면 디폴트 패키지에 만들지 말고 패키지 내에 클래스를 만드는게 좋다.
    원래는 new String(“
    ”) 하면 주소값으로 비교. new String(“~~”).intern(); 하면은 값 비교 된다.
    가장 좋은 패키지는 10개 이상의 클래스를 가지지 않는다.

  2. 클래스와 인스턴스 우리가 기존에 사용하는 것은 인스턴스 메서드와 인스턴스 필드이다.

    • 클래스: 인스턴스를 생성하기 위한 틀로 클래스 자체로는 상태가 없다. 객체를 관리하는 관리자의 개념이 있다.
    • 인스턴스(객체): 클래스를 통해 실체화되어 생성된다. 인스턴스는 상태를 가지며 메서드를 통해 인스턴스의 상태가 변경된다.
    • 클래스 필드는 상수로 여러 인스턴스에서 공유하는 정보가 있는 경우 static
    • 클래스 메서드는 인스턴스가 생성되지 않은 상태에서도 호출할 수 있다. static
    • 인스턴스 필드는 상태 변수
    • 인스턴스 메서드는 인스턴스 상태를 변경하거나 상태 정보를 반환할 때 사용
  • Static: 자바의 예약어로 클래스 메서드와 클래스 필드를 지정할 때 사용
  • static으로만 이루어진 클래스는 private으로 생성자를 만들어 객체화하지 못하도록 한다.

  • 인스턴스 필드, 클래스 필드의 유효 기간
    • 인스턴스 변수의 유효 기간은 인스턴스가 생성되었다가 소멸되는 시점
    • 클래스 변수의 유효 기간은 애플리케이션을 실행하고 클래스를 Java Virtual Machine이 클래스 바이트코드(vm을 위한 언어)를 읽어 load(메모리 할당)하는 시점부터 JVM unload(메모리 해제)하는 시점까지
    • java에서는 Garbage Collector가 있어서 자동으로 소멸시킨다.
  • 생성자
    • 여러 개의 생성자로 적절한 객체를 다양하게 생성할 수 있다.
    • 인수가 없는 default 생성자는 JVM이 기본으로 만들어준다.
    • 생성자에서 유효성 검증을 할 수도 있다.
public Car(final String name){
    this(name, 0);
}
public Car(final String name, final int position){
    validate(name);
    this.name = name;
    this.position = position;
}

와 같이 기본 생성자에서 원하는 생성자로 하도록 this()를 이용해 사용할 수 있다.
생성자로 생성하면 인스턴스가 무조건 만들어진다.

  • 정적 팩토리 메서드 (+ 이펙티브자바 1장)
    private static final Car Jason = new Car(Jason);
    Car.valueOf(Jason); 
    public static Car valueOf(final String name) {
      if(Jason.equals(name)){
          return Jason;
      }
      return new Car(name);
    }
    

    원하는 이름을 지정할 수 있다는 장점, 이미 생성된 인스턴스가 있는 경우 똑같은 인스턴스를 재생성하지 않고 이미 있는 인스턴스를 반환할 수 있다는 장점

assertThat에 랜덤 넘버 범위 확인

  • assertThat(number).isBetween(0,9); 하면 0부터 9 사이 확인

난수 생성

Random random = new Random();
random.nextInt(10); //0-9 생성