Languages(27)
-
[JAVA] TOCTOU : Time of Check to Time of Use
🦜 업무 또는 공부하다 마주친 문제에 대해서, 구글링을 해보며 공부한 내용입니다. 📝 TOCTOU : Time of Check to Time of Use 싱글 스레드가 아닌 멀티 스레드 환경에서, 하나의 리소스를 가지고 여러 스레드가 경쟁하는 상황이 발생할 수 있습니다. 만약 이런 경우는, Reentrant Lock, Synchronized 와 같이 비관적 락의 관점에서 접근하거나 Atomic 처럼 낙관적 락의 관점에서 어떻게 자원을 점유할지 고민할 수 있습니다. 그런데 이런 기법은 애플리케이션의 수준에서의 접근입니다. 만약 자원에 접근할 때, OS 수준까지 내려가면 어떻게 될까요? 이 때 발생할 수 있는 대표적인 문제 중 하나가 TOCTOU입니다. String path = "(파일 경로)";Fil..
2025.07.28 -
[JAVA] 값 복사 vs 참조 복사
💻 코드를 작성하면서 하기 쉬운 실수 중 하나가, 참조 복사가 되었는데... 값이 복사가 되었다고 생각할 때라고 생각합니다. 코드를 작성할 때는, 내가 원하는 것처럼 결과가 나올 것이야~~ 라고 생각할 겁니다. 하지만 막상 코드 한 줄 한 줄이 실행되고, 이후 마지막에 확인한 결과는, 놀랍게도 예측과 너무나도 다릅니다.값 복사? 참조 복사? 아래의 코드를 봤을 때는, 어떤 생각이 드시나요? x와 y를 이용하되, 중간에 값을 변경하려고 시도해보는구나! 라고 느끼실 겁니다.int x = 50;int y = x;x = 30;//x와 y를 출력하면, x는 30 y는 50이 출력된다! 위의 코드는 어떤 복사일까요? 정답은 '값 복사'입니다. 기본형이기에 값을 복사하게 된 것이지요! 그럼 기본형은 무엇일까요? J..
2025.02.25 -
[JAVA] Time
💻 회사에서 업무를 진행하면서, 시간을 Java 언어로 옮기는 데 미숙한 부분이 있었습니다. 따라서 글로 정리하면서 시간에 대한 개념을 정리하려고 합니다. 추가로 해당 내용은 예전, 인프런에서 [김영한의 실전 자바 - 중급 1편]에서 공부했던 내용도 포함되어 있습니다. 강의를 정말 추천 드리오니, 궁금하신 분들은 해당 강의 꼭꼭 참고해주세요!!Time 저희가 살아가면서 시간과 공간이라는 개념은 떼려야 뗄 수 없는 중요한 개념입니다. 예시로, 출근 '시간'이 되면 직장인들은 출근 '장소(회사)'로 출근하게 됩니다. 어떤 사건(event)가 발생했을 때, 이런 질문부터 나오게 됩니다. "언제 발생한 거야?" "어디서 사건이 발생했는데..?" 프로그램에서도 마찬가지입니다. 시간과 공간은 굉장히 중요한 개념..
2025.02.20 -
[JAVA] Stream++
📝 Modern Java in Action(강력 추천!!)을 통해 Java를 공부하고 있습니다. 해당 내용을 공부하고 까먹지 않기 위해, 제 언어로 정리합니다. 틀리거나 다른 부분이 있을 수 있습니다. 1. 컬렉션과 다른 Stream JAVA에서 대표적인 컬렉션의 예로, List가 있다. List는 논리적인 순서가 있는 자료구조로, 중복을 허용한다는 특징이 있다. 해당 List를 구현체로는 ArrayList나 LinkedList 등이 있다. 이런 List를 사용하려면 반복을 해야 하는데, 보통 for-each 를 이용하여 List의 요소를 추출하여, 추가 연산을 하게 된다. 이처럼 컬렉션은 반복을 위해서는 외부 반복(external iteration)을 해야 하는데, 외부 반복을 할 수 있도록 fo..
2024.10.05 -
[JAVA] Optional
1. NullPointerException 작년에 JAVA를 접하고 학원에서 공부를 시작하고 지난주 회사에서 업무를 진행하면서, 엄청 많이 접했던 에러 중 하나가 NullPointerException이었다. 그렇다면 NullPointerException 이 무엇일까? 참고했던 API 명세서에서는 NullPointerException 을 다음과 같이 설명하고 있다. Thrown when an application attempts to use null in a case where an object is required. These include:Calling the instance method of a null object.Accessing or modifying the field of a null obj..
2024.09.08 -
[JAVA] max()
회사에서 코드를 만들어보다가, (숫자로 변환할 수 있는)문자열을 요소로 가지는 배열을 이용하게 되었는데요. 해당 String[]의 요소 중 최대값을 구하는 방법을 고민하게 되었습니다. Http 통신에서 Content-type이 application/json 형태가 엄청 많았습니다. 이렇게 JSON으로 데이터를 주고 받을 때, String[]로 전달될 때가 있었고 아래와 같은 방법을 고민하게 되었습니다. 그래서 고민하던 3가지 방법을 작성해보려고 합니다.String[] testStr = new String[] {"1","2","3"}; 1. Collections 활용List listTest = new ArrayList();for(String str : testStr){ listTest.add(Intege..
2024.04.04