자바 14

[JAVA 자바/이펙티브 자바] 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라

스트림에서는 부작용 없는 함수를 사용하라 🐣 부작용이 없다? - 오직 입력만이 결과에 영향을 줘야 한다. - 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 이것을 `순수 함수`라고 부른다. 다음 예시에선, 스트림의 forEach에서 외부의 results를 참조하고, results의 상태를 변경하게 되는 부작용이 발생한다. ArrayList results = new ArrayList(); stream.filter(s -> pattern.matcher(s).matches()) .forEach(s -> results.add(s)); 아래처럼 고치는게 좋다. Listresults = stream.filter(s -> pattern.matcher(s).matches()) .coll..

[우아한테크코스] 레벨1 - 사다리 타기 미션 정리

아직 사다리 타기 미션이 끝난지 1주일도 지나지 않았기 때문에 회고글을 금방 쓸 수 있을 줄 알았다. 하지만 블랙잭 미션으로 머리가 과부하에 걸렸기 때문에 사다리 타기 미션을 진행할때 했던 생각은 진작 다 휘발되었다. 블로그 이름은 휘발 방지용인데... 그래서 이번에는 회고 대신 받았던 피드백과 새로 알게된 내용에 관련한 정리를 해봤다. 앞으로는 내가 미션을 할 때 무슨 생각으로 했는지 틈틈이 대략적인 메모라도 남겨놔야겠다고 생각했다. 🐣 TDD (Test-Driven-Development) 이번 미션의 주된 학습 주제는 TDD 였다. 테스트 주도 개발이라고 하는건데, 내가 프로덕션 코드를 짜기 전에 실패하는 단위 테스트를 구현해 놓고, 이 테스트가 성공할 정도로만 프로덕션 코드를 짜는 사이클을 반복하는..

[JAVA 자바] equals와 hashcode를 함께 정의해야 하는 이유

두 객체의 주소값이 같다면 두 객체를 물리적으로 같다고 한다. 두 객체가 주소값이 일치하지 않더라도, 두 객체의 필드가 일치하기만 한다면 두 객체가 같다고 판단하는 것은 두 객체는 논리적으로 같다고 한다. 모든 클래스들은 Object 클래스를 상속하는데, Object 클래스에는 equals 메소드가 존재한다. equals를 재정의 하지 않은 상태에서는 두 객체를 비교할 때 물리적 같을 때만 true를 반환한다. 반면 equals를 오버라이딩으로 재정의 해준다면 두 객체가 논리적으로 같을 때도 true를 반환하게 된다. 인텔리제이의 Generate 단축키(윈도우 기준 alt + insert)를 사용하면, 인텔리제이는 eqauls와 hashcode를 한번에 재정의하게 한다. 인텔리제이는 괜한 짓을 하지 않는..

[JAVA 자바] NumberFormatException은 IllegalArgumentException을 상속한다 / Exception 계층 구조

아주 큰 정수가 들어오는 경우에는 따로 예외처리하는 코드를 작성하지 않아서 이를 작성하고자 했다. 프로모션 코드를 작성하기에 앞서 테스트 코드를 작성하는 중이었는데 이상한걸 발견했다. 입력값으로 아주 큰 정수를 주었는데, IllegalArgumentException을 발생시켰다며 테스트 코드를 통과해버린 것이다. 나는 테스트가 실패할 줄 알았다. 실제로 프로그램을 실행시키고 아주 큰 정수를 입력값으로 주었을 땐 NumberFormatException이 발생했다고 하였기 때문이다. 그래서 IllegalArgumentException을 NumberFormatException으로 바꾸고 정보를 봤다. 그랬더니 IllegalArgumentException을 상속한다고 써있다. 다음 링크로 들어가보면 Except..

1 2