Java 3

equals(), hashCode (), == 연산자

서론 우리가 임의의 Class를 생성했을 때 별도로 생성하지 않아도 사용할 수 있는 메서드들이 있다. 그 예가 바로 toString(), equals(), hashCode()이다. 이러한 메서드들을 별도로 생성하지 않아도 사용할 수 있는 이유는 Java의 모든 class들은 Object 클래스를 상속받기 때문이다. 즉, 위 메서드들은 Object 클래스의 메서드이다. 참고) == 연산자는 대체 무엇인가? 기본적으로 == 연산은 주소값을 비교해서 같으면 true, 다르면 false를 반환한다. hashCode() hashCode 메서드는 객체의 해시값(integer)을 반환한다. 가장 상위 객체인 Object 클래스의 hashCode()는 아래와 같이 native 메서드로 지정되어 있으며, 객체의 메모리 ..

Java 2021.08.25

스트림

스트림이란 ? : 스트림은 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소'이다. 컬렉션과 스트림의 차이를 물어본다면 가장 큰 차이는 '목적'이라고 할 수 있을 것 같다. 컬렉션이 관련된 요소의 저장 및 접근 연산이 주를 이룬다면, 스트림은 filter, sorted, map 등과 같이 표현 계산식이 주를 이룬다. 즉, 컬렉션의 주제는 데이터 및 저장이고, 스트림의 주제는 계산이라고 볼 수 있다. 컬렉션 vs 스트림 : 아직 이해가 잘 안가는 사람들을 위해 한 번더 비유를 하자면, DVD에 어떤 영화가 저장되어 있다고 가정하면, DVD는 일종의 컬렉션이라고 볼 수 있다. 반면에 같은 비디오이지만 인터넷 스트리밍으로 비디오를 시청한다면, 이때는 스트림에 가깝다고 볼 수 있다. 스트리밍으로 비디..

Java 2020.07.28

동작 파라미터화

한 농장의 사과 재고 관리를 도와주는 애플리케이션을 작성중이다고 가정하자. 사과의 정보는 다음과 같다. 어제는 농부가 빨간색 사과만 필터링해서 보여달라고 요청해서 다음과 같이 코드를 작성했다. 하지만 오늘은 갑자기 무게가 150g이 넘는 사과만 필터링해 달라고 요청했다. 번거롭지만 다음과 같이 새로 코드를 작성했다. 기껏 작성했더니, 농부가 갑자기 색깔은 빨간색이면서 무게가 150g이 넘는 사과를 필터링해달라고 한다. 이와같이 요구사항이 변경될 때 마다 새로운 메서드를 작성하는 것은 매우 비효율적이다. 심지어 위 두 함수를 보면, if 의 조건부분을 제외한 나머지 코드는 모두 중복된다. 변화하는 요구사항에 좀 더 유연하게 대응할 수 있는 방법이 필요해 보인다. 이를 해결할 수 있는 방법이 바로 '동작 파..

Java 2020.07.27