본문 바로가기
카테고리 없음

java 링크 모음

by egas 2022. 2. 4.

 

1. 자바의 final은 언제 사용할까?

`Java에서의 final은 Immutable/Read-only 속성을 선언하는 지시어` 

 

2. 왜 자바에서 static의 사용을 지양해야 하는가?

맴버변수의 static 선언을 지양하자. 

 

3. Java에서 싱글톤 패턴이란?

전략 패턴, 빌더 패턴

4. 팩토리 메서드, 정적 팩토리 메서드 장단점 5가지

직접적으로 생성자를 통해 객체를 생성하는 것이 아닌 메서드를 통해서 객체를 생성하는 것을 정적 팩토리 메서드라고 한다.

 

정적 팩토리 메서드 네이밍 컨벤션

  • from : 하나의 매개 변수를 받아서 객체를 생성
  • of : 여러개의 매개 변수를 받아서 객체를 생성
  • getInstance | instance : 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음.
  • newInstance | create : 새로운 인스턴스를 생성
  • get[OtherType] : 다른 타입의 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음.
  • new[OtherType] : 다른 타입의 새로운 인스턴스를 생성.

 

5. Does the List subList() method prevent garbage collection of the rest of the list? 

subList is only a "view" onto the existing list. All the data is really in the original list.

The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.

따라서 subList 반환시 메모리 누수를 피하려면, 아래와 같이 반환해야한다.

 

return new ArrayList<Integer>(lottoList.subList(0, LOTTO_MAX_SIZE););

 

혹은 stream으로 표현 가능하다.

 

return lottoList.stream()
	      .limit(LOTTO_MAX_SIZE)
	      .collect(Collectors.toList());

 

6. 방어적 복사

    public List<Integer> getNumberList() {
        return Collections.unmodifiableList(numberList);
    }

 

7. [Java] VO(Value Object)란?

VO의 기본 특성

  1. Immutability(불변성) - 수정자가(setter) 없다
  2. value equality(값 동등성) - 내부 값 동등성 검사
  3. self validation(자가 유효성 검사) - 생성자에서 validate

 

8. AOP 입문자를 위한 개념 이해하기

 

9. 테스트를 작성하는 방법, .NET Core 및.NET 표준을 사용하는 단위 테스트 모범 사례

 

테스트를 만들다보면 현재의 디자인이 문제가 있는지 혹은 개선이 가능한지를 의심해 볼 수 있게 된다 

 

공용 메서드를 테스트하여 전용 메서드 유효성 검사

 

public string ParseLogLine(string input)
{
    var sanitizedInput = TrimInput(input);
    return sanitizedInput;
}

private string TrimInput(string input)
{
    return input.Trim();
}

ParseLogLine에서 예상하지 못한 방식으로 sanitizedInput을 조작하여 쓸모없는 TrimInput에 대한 테스트를 렌더링하는 것은 전적으로 가능하다.

public void ParseLogLine_StartsAndEndsWithSpace_ReturnsTrimmedResult()
{
    var parser = new Parser();

    var result = parser.ParseLogLine(" a ");

    Assert.Equals("a", result);
}

이 관점에서, 전용 메서드를 표시하는 경우 공용 메서드를 찾아 해당 메서드에 대해 테스트를 작성해야 한다.

 

매직 문자열 방지

 

단위 테스트에는 매직 문자열이 없어야한다.

 

이유

  • 값을 특별하게 만드는 요인을 파악하기 위해 테스트의 판독기가 프로덕션 코드를 검사할 필요가 없도록 한다.
  • 성취하려는 것보다는 증명하려는 것을 명시적으로 보여준다.

매직 문자열은 테스트 판독기에 혼동을 일으킬 수 있다. 문자열이 일반적이지 않은 경우 매개 변수 또는 반환 값에 대해 특정 값이 선택된 이유가 궁금할 수 있다. 이를 통해 테스트에 집중하기보다는 구현 세부 사항을 더 자세히 살펴볼 수 있다.

 

Bad:

[Fact]
public void Add_BigNumber_ThrowsException()
{
    var stringCalculator = new StringCalculator();

    Action actual = () => stringCalculator.Add("1001");

    Assert.Throws<OverflowException>(actual);
}

Better:

[Fact]
void Add_MaximumSumResult_ThrowsOverflowException()
{
    var stringCalculator = new StringCalculator();
    const string MAXIMUM_RESULT = "1001";

    Action actual = () => stringCalculator.Add(MAXIMUM_RESULT);

    Assert.Throws<OverflowException>(actual);
}

 

10. Java Enum 활용기

 

11. 원시 타입을 포장해야 하는 이유

 

12. 메서드 참조

 

13. 좋은 객체의 7가지 덕목

  1. 객체가 현실 세계에 존재한다
  2. 객체가 계약에 따라 동작한다
  3. 객체가 고유하다
  4. 객체가 불변적이다
  5. 객체의 클래스에 정적 멤버가 없다
  6. 객체의 이름이 직명을 나타내지 않는다
  7. 객체의 클래스가 Final이나 Abstract다

 

14.

728x90

댓글