java 6

[Java] 이중 콜론 연산자 (::)

1. 상황 아래와 같이 Optional에서 orElseThrow()를 통해 값이 없으면 발생시킬 exception을 지정하려 했습니다. Optional apiInfo = apiInfoRepository .findAll() .stream() .findFirst() .orElseThrow(() -> new ApiInfoNotExistException()); 그런데 orElseThrow()의 arg로 들어가는 lambda식을 아래와 같이 변경할 수 있었습니다. Optional apiInfo = apiInfoRepository .findAll() .stream() .findFirst() .orElseThrow(ApiInfoNotExistException::new); 2. 이중 콜론 연산자 이중 콜론(::)은 메..

CS/언어 2022.03.31

[JAVA] Hash와 Thread-Safe

현재 개발중인 코드에서 DB 데이터를 읽어 한 table의 정보를 바탕으로 HashMap의 mapping table을 저장하여 사용합니다. 그런데 이 table의 정보가 바뀔 수 있고, 그럴 때마다 다시 DB에 접근하는 것이 비효율적이라 생각하였습니다. 그래서 DB 정보가 바뀔 때마다 이 table도 같이 변경하도록 구현하였습니다. 이 때 들었던 생각이 Thread-safe입니다. 현재는 table에 동시 접근하는 일이 없지만, DB와 sync를 맞추고 있는 이 테이블에서 동기화 처리하지 않으면 DB와 integrity가 깨질 수 있습니다. 그래서 제가 사용하는 자료구조가 동기화 처리를 하는지 확인해보아야했습니다. HashMap은 unsynchronized 현재 mapping table로 사용했던 클래스..

CS/언어 2022.01.19

[JAVA] 자바의 다중상속

두 객체를 합친 객체를 정의하고싶다 JAVA로 개발을 하면서 데이터 중복과 사용하는 멤버의 범위 제한 등을 위해서 객체의 상속을 사용하게됩니다. 저는 이번에 데이터 중복을 줄이기 위해 상속을 사용하고 싶었습니다. A라는 객체와 B라는 객체의 멤버가 합쳐진 C 객체, 정확히 말하면 DAO A와 B가 있고 두 Entity가 join된 DAO인 C를 정의해야했습니다. 만약 다중상속이 된다면, 저는 A와 B를 모두 C가 상속하여 멤버변수를 다시 정의할 필요없이 관련 메서드만 작성하면 간단하게 C를 정의할 수 있습니다. 멤버가 많을수록 C를 정의하기 편하기도 하고, 중복된 이름의 변수가 줄어들기 때문에 더 선호하는 방식일 수 있습니다. 다중 상속을 지원하지 않는 이유 C++은 다중 상속이 지원되는 것으로 알고있습..

CS/언어 2022.01.11

[JAVA] POJO(Plain Old Java Object)

아직 자세히 알아보지 않은 상태이며, 추후 업데이트가 필요합니다 POJO POJO란 특정 기술에 의존이 없는 순수 자바 객체를 의미한다고 합니다. JAVA의 장점 중 하나인 재사용성을 이용해 보통 implements나 extends로 구현된 객체에 의존된 형태로 편하게 사용할 때가 많습니다. 그러나 이러한 방식은 프레임워크에 대한 의존성이 높아 가독성과 확장성에 문제가 될 수 있습니다. POJO와 의존성 그럼에도 Spring PSA(Portable Service Abstraction)에 의해 Spring은 객체를 의존성이 있는 형태로 구현하면서도 POJO를 지킬 수 있다고 합니다. 예를 들어, Spring은 ORM의 JPA 표준 인터페이스를 정의하여 Hibernate와 같은 ORM 프레임워크가 해당 인터..

CS/언어 2022.01.06