Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java

  1. 자바 구아바(Guava) Joiner 클래스 완벽 정리 – 문자열 연결하기

    구아바(Guava) Joiner 클래스란?구글에서 제공하는 오픈소스 라이브러리인 구아바(Guava)에는 Joiner라는 유틸리티 클래스가 포함되어 있습니다. 이 클래스는 문자열, 객체, 컬렉션 등을 특정 구분자(delimiter)로 손쉽게 연결할 수 있는 다양한 메서드를 제공합니다.특히 Joiner를 사용하면 배열이나 리스트에 null 값이 포함되어 있어도 안전하게 처리할 수 있다는 점이 큰 장점입니다. 일반적인 String.join() 방식과 달리, null 값을 건너뛰거나 다른 문자열로 대체하는 유연한 처리가 가능합니다.예제 코

  2. 자바에서 스레드를 안전하게 종료하는 방법

    자바에는 스레드를 강제로 종료하는 직접적인 메서드가 없습니다. 과거에 사용되던 Thread.stop()은 교착 상태나 데이터 불일치 같은 심각한 문제를 일으킬 수 있어 현재는 사용이 권장되지 않습니다(deprecated). 대신 가장 널리 쓰이는 안전한 방법은 volatile boolean 플래그 변수를 활용해 스레드가 스스로 실행을 멈추도록 유도하는 것입니다. 예제 코드public class Main{ static volatile boolean exit = false; public static void main(St

  3. Java로 문자열의 중복 없는 고유 순열 출력하기

    문자열의 고유한(distinct) 순열, 즉 중복을 제거한 모든 순열을 출력하는 Java 프로그램은 다음과 같습니다. 예제 코드 import java.util.ArrayList; public class Demo{ static boolean is_present(String my_str, ArrayList<String> rem){ for (String str : rem){ if (str.equals(my_str)) return true; }

  4. 자바(Java)로 매트릭스를 Z자 형태로 출력하는 프로그램 – 예제 코드와 해설

    2차원 배열(매트릭스)을 Z자 형태로 출력하는 것은 코딩 테스트와 알고리즘 학습에서 자주 만나는 대표적인 배열 순회 문제입니다. 여기서 Z자 형태란 매트릭스를 영문 대문자 Z를 그리듯이 순회하는 방식을 의미하며, 구체적인 방문 순서는 다음과 같습니다. 첫 번째 행 — 왼쪽에서 오른쪽으로 모든 요소를 출력 역대각선 — 오른쪽 위에서 왼쪽 아래로 이어지는 대각선 요소를 출력 마지막 행 — 왼쪽에서 오른쪽으로 모든 요소를 출력 아래는 이 로직을 자바로 구현한 예제 코드입니다. 예제 코드 import java.lang.*; import

  5. Java 9 인터페이스의 전용(Private) 메소드 활용법

    Java 9부터 인터페이스 내부에 전용(private) 메소드를 정의할 수 있게 되었습니다. 이를 통해 default 메소드와 static 메소드 간에 코드를 공유하면서 중복을 줄이고 캡슐화를 강화할 수 있습니다.예제 코드interface my_int{ public abstract void multiply_vals(int a, int b); public default void add_vals(int a, int b){ sub_vals(a, b); System.out.print(Default

  6. 자바 전제 조건(Precondition) – 리스트가 null 또는 빈 값인지 검사하는 방법

    전제 조건(Precondition)이란?전제 조건은 메서드가 정상적으로 동작하기 위해 반드시 충족되어야 하는 조건을 의미합니다. 이번 글에서는 매개변수로 전달된 리스트(List)가 null이거나 비어 있는지 확인하는 전제 조건을 작성하는 방법을 예제와 함께 살펴보겠습니다.예제 코드public void my_fun(List<Object> myList){ if (myList == null){ throw new IllegalArgumentException(List is null); } if

  7. Java로 균형 이진 탐색 트리(BST)에서 주어진 합을 만족하는 쌍 찾기

    개념균형 잡힌 이진 탐색 트리(Balanced BST)와 목표 합계(target sum)가 주어졌을 때, 두 노드 값의 합이 목표 합계와 같은 쌍이 존재하면 true를, 존재하지 않으면 false를 반환하는 함수를 작성하는 문제입니다. 이 문제에서 요구되는 조건은 다음과 같습니다.시간 복잡도: O(n)허용되는 추가 공간: O(log n)BST 구조 자체는 수정 불가참고로 균형 BST의 높이는 항상 O(log n)이라는 점을 기억해 두면 좋습니다.예시접근 방법1. 브루트 포스(완전 탐색)BST의 모든 노드 쌍을 하나씩 검사하여 합이

  8. Java로 구현하는 최장 회문 부분 수열(LPS) 찾기 프로그램

    최장 회문 부분 수열(Longest Palindromic Subsequence, LPS)이란 원본 문자열에서 문자 순서를 유지한 채 일부 문자를 제거하여 만들 수 있는 부분 수열 중, 앞에서 읽어도 뒤에서 읽어도 같은 가장 긴 문자열을 의미합니다. 예를 들어 HelloHelloo의 경우 가장 긴 회문 부분 수열은 llell입니다.이 문제는 문자열과 그 문자열을 뒤집은 문자열 간의 최장 공통 부분 수열(LCS)을 구하는 것과 동일하기 때문에, 동적 계획법(Dynamic Programming)을 활용하면 효율적으로 해결할 수 있습니다.

  9. 자바로 수열의 합 구하기: 1/1! + 2/2! + 3/3! + … + n/n!

    이번 글에서는 1/1! + 2/2! + 3/3! + 4/4! + … + n/n! 형태의 수열에서 n까지의 합을 구하는 자바 프로그램을 소개합니다.수열의 이해이 수열은 각 항마다 분자가 i이고, 분모가 i의 팩토리얼(i!)인 형태입니다. 예를 들어 n = 6일 경우 다음과 같이 계산됩니다.1/1! + 2/2! + 3/3! + 4/4! + 5/5! + 6/6!예제 코드import java.io.*; import java.lang.*; public class Demo{ public static double pattern_sum(d

  10. 자바 멀티스레딩에서 스레드 우선순위 완벽 가이드

    자바 스레드 우선순위란? 멀티스레딩 환경에서는 스레드 스케줄러(Thread Scheduler)가 각 스레드의 우선순위를 기준으로 CPU 자원을 배분합니다. 자바의 모든 스레드는 생성 시점부터 기본 우선순위를 부여받으며, JVM(Java Virtual Machine)이 이 값을 지정하거나 개발자가 직접 명시적으로 설정할 수도 있습니다. 자바에서 스레드 우선순위 값은 1부터 10까지(양 끝값 포함)의 정수 범위를 가지며, 다음과 같은 세 가지 static 상수가 제공됩니다. MAX_PRIORITY – 스레드가 가질 수 있는 최대 우선

  11. Java에서 정수(int)가 가질 수 있는 최댓값은 얼마일까?

    Java에서 MAX_VALUE는 int 타입이 가질 수 있는 최댓값을 확인할 때 사용하는 상수입니다. 아래 예제를 통해 실제 값을 직접 확인해 보겠습니다.예제 코드public class Demo{ public static void main(String[] args){ System.out.println(타입은); System.out.println(Integer.TYPE); System.out.println(크기는); System.out.println(Integer.SIZ

  12. Java에서 리스트 무작위로 섞기 – Collections.shuffle() 완벽 가이드

    Java에서 리스트(List)의 요소 순서를 무작위로 바꾸고 싶다면 Collections.shuffle() 메서드를 사용하는 것이 가장 간단한 방법입니다. 카드 게임, 퀴즈 문항 순서 변경, 추첨 프로그램 등 다양한 상황에서 유용하게 활용할 수 있습니다. 예제 코드 import java.util.*; public class Demo{     public static void main(String[] args){        &nbs

  13. 자바(Java) 타입 소거(Type Erasure)란? 개념과 동작 원리 총정리

    자바는 제네릭 프로그래밍(Generic Programming)을 지원하고 더 엄격한 타입 검사를 수행하기 위해 타입 소거(Type Erasure) 메커니즘을 사용합니다. 타입 소거란 컴파일 시점에 제네릭 타입 정보를 제거하여 런타임에는 일반 클래스와 동일하게 동작하도록 만드는 과정입니다.타입 소거의 핵심 동작 방식제네릭 타입의 모든 타입 매개변수는 바운드(bound)가 있는 경우 해당 바운드 타입으로, 바운드가 없는 경우 Object 타입으로 대체됩니다. 그 결과 바이트코드에는 클래스, 메서드, 인터페이스만 남게 됩니다.타입 안정성

  14. Java의 참조 유형 완벽 가이드: Strong, Weak, Soft, Phantom 참조

    Java에서 데이터가 가비지 컬렉션(Garbage Collection)되는 방식에 따라 참조는 크게 네 가지 유형으로 나눌 수 있습니다. 강한 참조(Strong Reference) 약한 참조(Weak Reference) 소프트 참조(Soft Reference) 팬텀 참조(Phantom Reference) 강한 참조(Strong Reference) 강한 참조는 Java에서 기본적으로 적용되는 참조 유형입니다. 강한 참조가 살아 있는 객체는 가비지 컬렉터가 임의로 회수할 수 없으며, 해당 객체를 회수 대상으로 만들려면 강한 참조를

  15. Java에서 final 변수와 함께 발생하는 도달 불가능한 문(Unreachable Statement) 완벽 이해

    도달 불가능한 문(Unreachable Statement)이란 프로그램이 실제로 실행되는 과정에서 한 번도 실행되지 않는 코드를 의미합니다. 컴파일러는 이러한 코드를 감지하면 컴파일 오류를 발생시켜 개발자에게 알려줍니다.도달 불가능한 문이 발생하는 주요 원인코드 앞에 return 문이 있어 해당 지점 이후의 코드가 실행되지 않는 경우코드에 무한 루프가 존재하여 루프를 벗어날 수 없는 경우프로그램이 해당 코드에 도달하기 전에 강제로 종료되는 경우이번 글에서는 final 키워드와 함께 사용될 때 도달 불가능한 문이 어떻게 나타나는지 예

  16. Java에서 final이 아닌 변수를 사용한 도달 불가능한 문(Unreachable Statement) 완벽 이해

    Java에서 도달 불가능한 문(Unreachable Statement)은 프로그램의 실행 흐름상 절대로 실행될 수 없는 코드를 의미합니다. 컴파일러는 조건의 값이 컴파일 시점에 확정되는 경우(final 상수 등) 해당 코드에 도달할 수 없다고 판단하여 컴파일 오류를 발생시킵니다.반면 final이 아닌(non-final) 변수를 사용하면 이야기가 달라집니다. 변수의 값은 언제든 변경될 수 있으므로 컴파일러는 루프 뒤의 문장을 여전히 도달 가능하다고 간주합니다. 따라서 컴파일은 정상적으로 성공하지만, 실제 실행 시점에는 조건이 계속 참

  17. 자바 소프트 참조(SoftReference)와 팬텀 참조(PhantomReference), 예제 코드로 쉽게 이해하기

    소프트 참조(SoftReference)는 주로 메모리 상황에 민감하게 동작하는 캐시를 구현할 때 널리 활용됩니다. 가비지 컬렉터는 JVM의 메모리가 부족할 때만 소프트 참조된 객체를 회수하기 때문에, 캐시 용도로 매우 적합합니다. 그럼 자바에서 소프트 참조를 사용하는 예제를 살펴보겠습니다.소프트 참조 예제import java.lang.ref.SoftReference; class Demo{     public void display_msg(){      

  18. 자바(Java)에 없는 C++ 기능 14가지 총정리

    C++와 자바(Java)는 문법적으로 닮은 점이 많지만, 설계 철학은 완전히 다른 언어입니다. C++가 성능과 저수준 제어를 중시하는 반면, 자바는 이식성과 안정성, 개발 편의성을 우선합니다. 그 결과 C++에는 존재하지만 자바에서는 의도적으로 제외된 기능들이 여럿 있습니다. 아래에서 항목별로 살펴보겠습니다. 메모리 및 데이터 타입 관련 차이 unsigned 정수 타입 부재: 자바에는 C++의 unsigned int 같은 부호 없는 정수형이 없습니다. 모든 정수 타입이 부호를 가집니다. 소멸자(destructor)와 delete

  19. C++와 Java의 기본 가상 메서드 동작 방식 차이 완벽 정리

    객체 지향 프로그래밍에서 가상 함수(virtual function)는 다형성(polymorphism)을 구현하는 핵심 개념입니다. 흥미롭게도 C++와 Java는 이 가상 함수를 다루는 기본 동작 방식이 서로 정반대입니다. 두 언어의 차이를 명확히 이해하면 오버라이딩 관련 버그를 예방하고 더 안전한 코드를 작성할 수 있습니다. C++의 경우: 기본적으로 비가상(Non-virtual) C++에서 클래스의 멤버 함수는 기본적으로 비가상(non-virtual)입니다. 즉, 별도의 키워드 없이 선언된 일반 멤버 함수는 컴파일 시점에 호출이

  20. 자바(JVM) 바이트코드 검증(Verification) 과정 완벽 이해

    자바 프로그램이 실행되기 위해서는 소스 코드가 컴파일되어 .class 파일로 생성되고, 이 파일에 담긴 바이트코드가 JVM(Java Virtual Machine)에 의해 로딩됩니다. 바이트코드가 클래스 로더를 통해 메모리에 적재되면, 곧바로 실행되는 것이 아니라 검증기(Verifier)라는 특별한 구성 요소를 거치게 됩니다.검증기는 로드된 바이트코드가 자바 언어 명세와 JVM 규격에 맞는 유효한 코드인지 확인하는 역할을 합니다. 구체적으로는 스택 오버플로우나 언더플로우 여부, 타입 변환의 적합성, 잘못된 메서드 호출이나 접근 권한

Total 1926 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:77/97  20-컴퓨터/Page Goto:1 71 72 73 74 75 76 77 78 79 80 81 82 83