본문 바로가기

전체 글

(69)
Optional 체스를 구현하던중 Optional 에 대해서 알게 되었다. Optional 의 등장배경Optional 은 null 로 인해 발생하는 문제 때문에 등장하게 되었다.메서드의 반환값으로 null 이 반환될 수 있고, 때문에 에러가 발생될 가능성이 높은 상황이라면 사용하자는 취지이다. 백문이 불여일견코드로 살펴보자. Optional 적용 전체스의 메소드 중 체스판의 좌표(Position)에 해당하는 체스말(Piece)을 찾는 메소드가 있었다.123456public Piece findPieceByPosition(Position position) { return pieces.stream() .filter(x -> x.isEqualPosition(position)) .findAny() .orElse(null);} ..
람다와 스트림 함수형 프로그래밍 함수 함수는 같은 인수값으로 함수를 호출했을 때 항상 같은 값을 반환한다. (Random, Scanner 등은 함수가 될 수 없다) 함수형 프로그래밍 함수나 메서드는 지역 변수만을 변경해야 함수형이라 할 수 있다. side-effect가 발생하지 않음 그리고 함수나 메서드에서 참조하는 객체가 있다면 그 객체는 불변객체여야 한다. 즉, 객체의 모든 필드가 final이어야 하고 모든 참조 필드는 불변 객체를 직접 참조해야 한다. 함수나 메서드가 어떤 예외도 일으키지 않아야 한다. 이점 멀티코어와 동시성 제어 캐싱 입력에 따른 출력 결과가 같기 때문에 캐싱을 하여 다시 계산하지 않고 저장하는 최적화 기능을 제공한다. 꼬리호출 최적화 람다표현식 람다표현식 람다 표현식은 메서드로 전달할 수 있는..
클래스와 인스턴스 다음 내용은 우아한테크코스에서 클래스와 인스턴스를 주제로 수업한 내용을 정리한 것이다. 클래스 클래스는 일종의 '객체의 팩토리' 로 볼 수 있다. 아쉽게도 Java에서 제공하는 new 연산자는 충분히 강력하지 않아 유사한 객체가 존재하거나 재사용 가능한지 확인하지 않는다. 클래스를 객체를 반환할 수 있는 웨어하우스로 바라봐야 한다. 응집도가 높고 견고한 클래스에는 적은 수의 메서드와 상대적으로 더 많은 수의 생성자가 존재한다. ex) 3 ~ 5의 public 메서드, 7 ~ 10개의 생성자 초기화 로직을 오직 하나의 생성자에만 위치시키고 이 생성자를 '주 생성자(primary constructor)'라고 부른다. 부 생성자(secondary constructor)라고 부르는 다른 생성자들이 주 생성자를 ..
TDD TDD 란? Test Driven Development(테스트 주도 개발, TDD) 테스트를 주도로 개발을 하는 개발 방식으로, TDD 의 단계는 다음과 같다. 1 단계 실패하는 테스트를 만든다. 2 단계 테스트가 성공하도록 프로덕션 코드를 구현한다. 3 단계 프로덕션 코드와 테스트 코드를 리펙토링한다. 그림으로 표현하면 다음과 같다. TDD 원칙 원칙 1 - 실패하는 단위 테스트를 작성할 때까지 프로덕션 코드(production code)를 작성하지 않는다. 원칙 2 - 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 원칙 3 - 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. ⌨️TDD 해보기 다음 간단한 프로그램을 TDD 방식으로 구현해보자 예제 소개 **..
인터페이스, Interface 코드로 보는 인터페이스의 기능 1. 코드규약 다음 코드를 살펴보자. 먼저 SubjectInterface 라는 인터페이스가 있고, score() 와 getName() 을 추상메소드로 가지고 있다. 1 2 3 4 5 6 package school; public interface SubjectInterface { public int score(); public String getName(); } 다음은 SubjectInterface 인터페이스의 구현이다. 각 과목들은 implements 로 SubjectInterface 를 받고 있기 때문에 'public int score()' 와 'public String getName()' 을 필수로 구현해 주어야 한다. 1 2 3 4 5 6 7 8 9 10 11 pack..