CS/언어 10

[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] Long에 대하여

Spring boot로 프로젝트를 하다보니, 정수형 변수로 Long을 자주 사용하게 되었습니다. 그러다 for loop에서 보통 int를 사용하다가 long을 사용하게 되었는데, long형을 사용했을 때 발생하는 문제가 없나?라는 고민을 시작으로 몇가지 알아본 사실을 적어보려 합니다. Long과 long의 관계 long은 JAVA의 원시타입인 변수타입이고, Long은 long을 다루는 객체를 의미합니다. 이처럼 원시타입을 객체로 다루기위해 사용하는 클래스를 Wrapper 클래스라고 합니다. 원시타입을 Wrapper 클래스인 참조타입으로 만드는 것을 boxing, 그 반대를 unboxing이라고 합니다. 원시타입과 참조타입인 객체는 확연하게 분리되어야하는데, 제가 생각하는 것보다 두 경계가 크지 않았습니다..

CS/언어 2022.01.12

[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

[Python] Pypy와 CPython (구현체)

프로그래밍 언어의 구현체 (Implementation) 우리는 파이썬을 이야기할 때 종종 언어 뿐만 아니라 구현체를 포함하여 말한다. 파이썬은 다양하게 구현될 수 있는 언어의 스펙일 뿐이다. When we speak of Python we often mean not just the language but also the implementation. Python is actually a specification for a language that can be implemented in many different ways. 프로그래밍 언어에서 말하는 구현체란, 위와 같이 실제 언어를 구현한 방식을 말합니다. 언어라는 것은 문법과 같이 정의된 추상적인 틀이며, 이에 대한 구현에 따라 동작 방식도 성능도 달라집..

CS/언어 2021.10.01