[Java] Optional의 기초 이해
·
Java
Optional이 필요한 이유Java에서 null은 객체가 존재하지 않음을 표현하는 기본적인 방법이다. 하지만 null은 타입 시스템을 우회하기 때문에, 컴파일러는 해당 값이 실제로 null인지 미리 알 수 없다.그 결과, 컴파일러는 null이 들어올 가능성을 알지 못하고, 개발자는 어디서 NullPointerException이 터질지 런타임 시점 에서야 알게 된다.Java의 타입 시스템Java의 타입 시스템은 컴파일 타임에 타입을 검사합니다. 예를 들어 String 변수에 Integer를 넣으면 컴파일 에러가 발생합니다.(ex - String name = 123;)하지만, null은 예외적으로 어떤 타입에도 대입이 가능하기에, 실제로 값이 있는지 null인지 컴파일러가 알 수 없습니다.예시 코드다음과 ..
[Java] 컬렉션 프레임워크 - Set(HashSet, TreeSet)의 이해
·
Java
2026.02.22 - [Java] - [Java] 컬렉션 프레임워크 - List(ArrayList, LinkedList)의 이해 [Java] 컬렉션 프레임워크 - List(ArrayList, LinkedList)의 이해[Java] 시간복잡도와 빅 오(Big-O) 표기의 이해알고리즘(Algorithm)이란?알고리즘이란 어떠한 문제를 해결하기 위한 단계적인 절차 또는 방법입니다. 저희는 단순히 문제를 해결하는 것만이 아닌, 더min-soon.tistory.com Set이란?Set은 중복을 허용하지 않는 자료구조입니다. Collection의 인터페이스를 상속받는 인터페이스이며, 같은 값을 두 번 저장하려고 하면, 자동으로 하나만 저장됩니다. 또한 순서를 보장하지 않습니다. (일부 구현체는 순서를 유지합니다)..
[Java] 컬렉션 프레임워크 - List(ArrayList, LinkedList)의 이해
·
Java
[Java] 시간복잡도와 빅 오(Big-O) 표기의 이해알고리즘(Algorithm)이란?알고리즘이란 어떠한 문제를 해결하기 위한 단계적인 절차 또는 방법입니다. 저희는 단순히 문제를 해결하는 것만이 아닌, 더 빠르고 더 효율적인 방법을 고민해야 합니min-soon.tistory.com Collection이란?Collection 인터페이스는 여러 개의 객체를 저장하는 구조를 추상화한 최상위 인터페이스입니다. 즉, 객체들을 모아 관리하기 위한 공통 규격을 표준화한 인터페이스이며, 자바에서 자료구조를 사용할 때 대부분의 구조는 Collection을 기반으로 설계되어 있습니다.Collection 인터페이스는 List, Set, Queue와 같은 다양한 하위 인터페이스의 공통 부모입니다.이들은 모두 Collect..
[Java] 시간복잡도와 빅 오(Big-O) 표기의 이해
·
Java
알고리즘(Algorithm)이란?알고리즘이란 어떠한 문제를 해결하기 위한 단계적인 절차 또는 방법입니다. 저희는 단순히 문제를 해결하는 것만이 아닌, 더 빠르고 더 효율적인 방법을 고민해야 합니다. 그래서 알고리즘을 평가할 때 보통 시간복잡도(Time Complexity)와 공간복잡도(Space Complexity)를 고려해야 합니다. 즉 좋은 알고리즘이란 메모리를 적게 사용하고, 빠르게 실행되는것이며, 알고리즘의 효율성은 시간복잡도와 공간복잡도를 기준으로 판단합니다. 그렇다면 먼저 알고리즘이 얼마나 빠르게 실행되는지를 나타내는 시간복잡도(Time Complexity)에 대해 알아보겠습니다. 시간복잡도(Time Complexity)란?시간복잡도는 입력 데이터의 크기(n)가 증가할 때, 알고리즘의 실..
[Java] I/O스트림의 이해와 활용
·
Java
I/O 스트림이란?자바가 가진 데이터를 외부의 파일로 보내거나, 외부의 파일을 자바 내부 안으로 가져올 때, 모두 byte 단위를 기본으로 사용하며, 자바 프로그램은 혼자서 아무것도 읽거나 쓸 수 없기 때문에, 항상 I/O 스트림을 이용해야 합니다. 그렇다면 I/O 스트림이란 무엇일까요? I/O 스트림이란 InputStream, OutputStream 즉 입출력 스트림을 의미하며, 각 스트림은 단방향으로 흐릅니다. 즉 I/O스트림은 프로그램이 외부와 데이터를 주고받기 위한 통로이며, Input은 외부-> 프로그램, Output은 프로그램 -> 외부로 생각하시면 됩니다. 여기서 외부는 파일, 네트워크, 메모리 등을 뜻합니다. 자바 프로세스가 가지고 있는 데이터를 밖으로 보내려면 출력 스트림을, 외부 데이터..
[Java] 멀티스레드의 이해 (스레드의 상태와 동기화 중요성 )
·
Java
안녕하세요, 지난 글에서 스레드의 기본 개념에 대해서 공부하며, 하나의 프로그램 안에서 여러 작업이 동시에 실행될 수 있다는 점을 배웠습니다. 오늘은 멀티스레드 환경에서 스레드가 어떤 상태를 거치며 실행이 되는지, 그리고 여러 스레드가 동시에 공유 자원에 접근하면 발생할 수 있는 문제 등에 대해서 공부하려고 합니다. 멀티스레드 환경에서 중요한 스레드 간의 충돌을 방지하고, 프로그램의 안정성을 보장하기 위해 반드시 필요한 개념인 동기화(synchronization)가 왜 중요한지도 함께 알아볼 예정입니다. 따라서 이번 내용을 통해 멀티스레드의 유용함과, 위험성에 대해서 알아보고 한 단계 더 깊이 이해하는 것이 목표입니다.스레드 상태스레드에는 총 6가지의 상태로 나누어지며, 각 상태는 스레드가 실행되고 종..
[Java] 멀티스레드의 기초 이해
·
Java
멀티스레드를 이해하기 위한 운영체제 기초 개념 정리멀티스레드를 제대로 이해하기 위해서는 운영체제의 기본적인 실행 구조를 알아야 합니다. 프로그램 실행이란 프로그램을 구성하는 코드가 CPU에서 순차적으로 계산되는 과정을 의미합니다. CPU 코어가 1개라면 하나의 작업만 실행할 수 있습니다. 예를 들어 음악을 듣는 프로그램 A, 웹서핑을 하려는 프로그램 B 2개를 동시 실행을 하고 싶지만, 단일 프로그램 실행이 되기 때문에 프로그램 A 음악을 다 들어야 웹서핑을 하려는 프로그램 B가 실행이 됩니다. 실제 초창기의 컴퓨터는 이러한 방식이었으며 이를 해결하기 위해 한 개의 CPU 코어로 여러 프로그램을 동시에 실행하는 멀티 태스킹 기술이 등장했습니다. 멀티테스킹애니메이션이나 영상이 초당 30 ~ 60장의 이미..