One Cookie a day
-
Enum을 비교할 때에는 ==과 equals()중 어떤 것을 써야 할까?One Cookie a day 2024. 2. 6. 10:23
회사에서 MergeRequest를 올리고 코드 리뷰를 팀원께 요청드렸었는데, 아래와 같이 Dto에 있던 enumType비교 시 ==기호를 사용한 것에 대해 코드 리뷰가 달렸었다. if (someDto.type == someEnumType.Atype) { // do something } Enum 비교에 있어서 equals( )와 ==의 차이에 대해 공부해보는것도 좋을 것 같다고 공부할만한 토픽을 하나 주셔서, 겸사겸사 공부한 것을 정리하려 포스팅한다. equals( )와 == 연산의 차이는 CS 스터디때도, 멘토링 공부하면서도 알고 있던 부분이라고 생각했고, 다시 내가 공부했던 내용을 찾아보면 아래와 같다. equals()는 참조 변수의 값이 같은지 비교하는 메소드로, 재정의 되어있지 않다면 객체의 주소값..
-
Transaction에 대해서 알아보자One Cookie a day 2023. 10. 27. 05:05
📑 Transaction 이란 무엇일까 이 질문에 대해서, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위라고만 알고 있었는데, 덧붙여 말하자면 나눌 수 있는 최소한의 작업단위를 의미한다. 예를 들어 '이체'를 생각해보자. 송금하려는 계좌가 정상 계좌인지 확인한다. 내 계좌에 이체하려는 금액 이상이 남아있는지 확인한다. 해당 계좌에 이체 요청을 보낸다. 요청 완료 응답을 받고 이체가 끝난다. 위에 적힌 작업들이 [ 이체 ]라는 일을 하기 위해 필요한 최소한의 작업들이다. 그런데, [ 이체 ] 라는 작업 (트랜잭션) 내에서도 계좌 확인 / 보내려는 계좌가 타 은행일 경우에 해당 시스템에 확인 및 송금 요청 이런식으로 내부에 트랜잭션이 나누어져 있다. 📑 Transaction Propagation ..
-
싱글톤 디자인 패턴에 대해One Cookie a day 2023. 10. 16. 19:36
🎾 싱글톤 패턴이란 무엇인가? 하나의 클래스 당 하나의 인스턴스만을 가지고 재사용하는 디자인 패턴을 말한다. 하나의 인스턴스만 사용하기 때문에 메모리를 효율적으로 사용하고, 객체들 간 데이터 공유가 쉽지만, 그만큼 여러 단점도 가지고 있어 안티패턴으로 불리기도 한다. 첫 번째로, 싱글톤 패턴을 구현하는 코드들이 많이 필요하며, (멀티스레드 환경에서의 동시성 문제 해결을 위한 코드 등) 테스트 시 매번 인스턴스 상태를 초기화하는 작업이 필요하다. 싱글톤 객체가 너무 많은 로직을 가지고 있어 여러 객체들이 공유해서 사용한다면, 객체들 간 결합도가 높아져서 OCP(개방폐쇄원칙 - 확장에는 열려있고 수정에는 닫혀있다, 기존의 코드를 변경하지 않으면서 기능을 확장할 수 있어야 한다) 위배할 확률이 높다. 🎾 어떻..
-
Java 7 이상에서 ArrayList 크기 계산 시 비트 연산자를 활용하는 이유One Cookie a day 2023. 10. 10. 18:11
이전 포스팅에서 ArrayList는 어떻게 동적으로 크기를 늘려줄 수 있는지에 대해 Java 6, 7, 8 버전의 차이를 비교했었다. 2023.10.09 - [One Cookie a day] - ArrayList는 어떻게 동적으로 크기를 늘릴 수 있을까? ArrayList는 어떻게 동적으로 크기를 늘릴 수 있을까? 이전에 CS 스터디에서 ArrayList와 LinkedList의 차이에 대해 공부한 적이 있다. ArrayList 배열과 유사하나 크기를 지정하지 않고 동적으로 값을 삽입하고 삭제할 수 있음 초기 용량이 다 차면 더 큰 Array bubblebubble.tistory.com 위 글에서도 알 수 있듯, Java 6에서는 늘려줄 크기를 ( 현재 배열의 크기 * 3 ) / 2 + 1라는 계산식을 통..
-
ArrayList는 어떻게 동적으로 크기를 늘릴 수 있을까?One Cookie a day 2023. 10. 9. 16:01
이전에 CS 스터디에서 ArrayList와 LinkedList의 차이에 대해 공부한 적이 있다. ArrayList 배열과 유사하나 크기를 지정하지 않고 동적으로 값을 삽입하고 삭제할 수 있음 초기 용량이 다 차면 더 큰 ArrayList 생성 후 거기다 복사한다. 원소가 많다면 대략적인 용량을 처음에 설정하는 것이 성능상 좋다. 조회 각 데이터의 index 가지고 있고 index를 통해 해당 데이터에 바로 접근 가능 데이터 삽입, 삭제 가장 마지막 자리에 데이터를 삽입하거나 삭제한다면 빠른 속도가 가능하나, 중간에 데이터를 삽입하거나 삭제할 경우 빈 칸만큼 뒤의 원소를 앞으로 이동시켜야 한다. (위치를 맞춰줘야 함) 따라서 일반적으로 ArrayList 중간에 원소를 삽입하거나 삭제하는 경우가 많다면 비효..
-
-
Thread Safety에 대해 알아보자One Cookie a day 2023. 9. 22. 20:31
Thread 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 Thread끼리 메모리의 특정 부분을 공유하며 작동 Code : 프로그램의 코드 / 명령어들이 기계어로 저장된 영역 Data : 코드에서 선언된 전역 / 정적 변수가 저장되는 영역 -> 실행 시 할당되고 종료 시 소멸 Stack : 컴파일 타임에 크기 결정, 지역변수, 매개변수, 리턴 값 등 저장 Heap : 런타임에 크기가 결정, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역, 참조형 등 저장 독립적으로 가지는 부분 : program counter, register set, stack 다른 스레드와 공유하는 부분 : code, data, OS resources Thread-Safety? * 멀티 스레드 간 동기화 문제란? ..