728x90

2025/03 13

[CS] Java String, StringBuilder, StringBuffer 차이

String자바의 문자열을 다루는 클래스로 불변(immutable)입니다. 한 번 생성된 String 객체의 내용은 변경할 수 없고 새로운 String 객체를 생성하여 참조를 변경할 수 있습니다.주요 특징불변성(Immutability): String 객체는 생성 후 내용을 변경할 수 없는 불변성 객체String pool: 문자열 리터럴로 생성된 String 객체는 문자열 상수풀에 저장되어 메모리 효율을 높이고 동일한 문자열에 대해 여러 참조가 같은 메모리 주소를 가리킬 수 있게 함Thread-Safe: String은 불변성으로 객체의 내용이 변하지 않기 때문에 멀티스레드 환경에서 여러 스레드가 동시에 같은 String 객체를 읽어도 안전하게 동작final 클래스: String 클래스는 final로 선언되..

스터디/CS 2025.03.28

[CS] 자바 문자열 할당 방식

문자열을 리터럴로 할당하는 것과 객체로 할당하는 것의 차이는 new 키워드의 사용 여부로 구분할 수 있고 new 키워드의 사용 여부에 따라 메모리 할당과 객체 참조 방식이 달라짐리터럴 할당큰따옴표 안에 문자열을 직접 입력하는 방식메모리 저장 위치: 문자열 상수 풀(String Constant Pool) → 힙 영역의 일부객체 생성: 동일한 문자열 리터럴이 여러 번 사용되면 동일한 메모리 주소 참조비교: == 연산자를 사용한 비교 시 동일한 리터럴은 true 반환String str1 = "리터럴 할당";String str2 = "리터럴 할당";System.out.println(str1 == str2); //true문자열 상수 풀은 메모리에서 문자열을 중복 저장하지 않도록 하여 메모리 효율을 높임처음으로 특..

스터디/CS 2025.03.27

[CS] 객체 지향 프로그래밍 특징

객체 지향 프로그래밍(OOP)의 주요 특징 캡슐화, 상속, 다형성, 추상화가 존재1. 캡슐화 (Encapsulation)객체의 상태와 행동을 하나로 묶고, 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 제한하는 것을 의미목적외부에서 객체의 내부 데이터를 수정하지 못하게 하여 데이터 보호 → 무결성 유지캡슐화된 객체는 다른 프로그램에서 재사용 가능 → 재사용성 향상객체의 내부 구현을 숨겨 사용자는 사용 방법만 알고 구현에 대해 신경 쓸 필요 없음 → 복잡성 감소캡슐화 방법접근 제한자 사용:private: 객체 내부에서만 접근 가능protected: 객체 내부와 상속받은 자식 클래스에서 접근 가능public: 외부에서 접근 가능Getter & Setter 사용: 객체의 내부에 직접 접근하지 않고 메서드..

스터디/CS 2025.03.26

[CS] Garbage Collection

1. 가비지 컬렉션 (Garbage Collection) 이란?프로그램에서 더 이상 사용되지 않는 메모리를 자동으로 회수하여 메모리 관리를 효율적으로 수행하는 기술2. 왜 필요한가?메모리 누수 방지: 수동 메모리 관리 시 발생할 수 있는 메모리 누수를 자동으로 관리해 방지메모리 안전성: 개발자가 메모리 주소를 직접 관리할 필요가 없어 잘못된 메모리 접근이나 해제로 인한 오류가 줄어듬생산성 향상: 메모리 관리에 대한 부분을 개발자가 고려하지 않아도 됨3. 동작 방식주로 mark-and-sweep 알고리즘을 기반으로 수행 → Mark, Sweep 단계로 나뉨Mark Phase: 프로그램의 루트 객체에서 시작하여 이 객체들이 참조하는 모든 객체를 표시 → 모든 참조 가능한 객체 식별Sweep Phase: 표시..

스터디/CS 2025.03.25

[Programmers] 서버 증설 횟수 JAVA

[Programmers] 서버 증설 횟수 - LV 2 접근큐풀이2025 코드챌린지 2차 예선 문제로 게임 서버가 증설되는 횟수를 구하는 문제이다. 게임을 이용하는 사람이 m 명 늘어날 때마다 서버가 증설되고 k 시간 동안 유지된다. 각 시간대마다 게임을 이용하는 사람의 수가 주어지고 총 서버 증설 횟수를 구하는 문제인데 m 명 이상의 사람이 접속하는 경우 서버가 증설되어 m 명 미만의 경우 서버가 증설되지 않는 부분을 잘 체크하면 된다.  public int solution(int[] players, int m, int k) { int count = 0; Queue active = new LinkedList(); for (int i = 0; i 큐를 사용해 현재..

[CS] JVM 구조

JVM (Java Virtual Machine)JVM은 자바 프로그램을 실행하기 위한 가상 머신으로, 자바 코드를 운영체제에 구애받지 않고 실행하게 해 줌JVM 구성 요소Class Loader, Execution Engine, Garbage Collector, Runtime Data Area로 나눠짐  1. Class Loader (클래스 로더)역할: .class 파일을 JVM에 로드하고 Link 및 Initialization을 통해 JVM에서 실행 가능한 상태로 만드는 역할동작 과정:Loading: 클래스 파일을 JVM에 로드Linking: 로드된 클래스를 런타임 상태에 연결Initialization: 클래스 정적 변수 초기화클래스 로더 계층:부트스트랩 클래스 로더(Bootstrap Class Load..

스터디/CS 2025.03.14

[Programmers] 택배 상자 꺼내기 JAVA

[Programmers] 택배 상자 꺼내기 - LV 1 접근계산?풀이코드챌린지 2차 예선 문제로 택배 상자를 요구하는 순서로 쌓아 위에서부터 상자를 뺄 때 총 몇 개의 상자를 빼야 하는지 구하는 문제이다. 상자는 지그재그로 쌓기 때문에 꺼내야 하는 상자의 꼭대기엔 몇 개의 상자가 존재하는지 알 수 없다. 단순하게 일일이 상자를 다 쌓아보고 풀어도 될 거 같지만 단순하게 위의 상자만 빼기 때문에 계산을 통해 구해질 거 같아 해 봤다. public int solution(int n, int w, int num) { int totalLevel = n / w; if (n % w > 0) totalLevel++; int targetLevel = num / w; ..

[CS] Java 실행 과정

1. 소스 코드 작성자바 코드로 이루어진. java 파일을 작성인간이 읽을 수 있는 형태2. 컴파일javac 컴파일러를 통해 자바 코드를 바이트 코드로 변환컴파일 과정에서 문법 오류 검사JVM이 이해 가능한. class파일 생성 → 플랫폼에 독립적3. 클래스 로딩ClassLoader가 JVM의 메모리 영역에 로드(Runtime Data Area) → Loading, Linking, Initialization 단계로 구성Loading: 클래스 파일을 읽고 메모리에 적재Linking: 로드된 클래스 검증 하고 준비 → Verify, Prepare, Resolve 단계로 구성Verify: 검증 단계, 클래스가 자바 언어 명세와 JVM 명세에 맞는지 검사Prepare: 준비 단계, 클래스에 필요한 메모리를 할당..

스터디/CS 2025.03.12

[Algorithm] 완전 탐색

완전 탐색"무식해 보여도 사실은 최고의 방법일 때가 있지요."특징복잡한 알고리즘 없이 단순한 모든 경우의 수를 검사하기 때문에 직관적모든 경우의 수를 검사하기 때문에 무조건 정답을 찾을 수 있음모든 경우의 수를 검사하기 때문에 시간이 오래 걸림종류브루트 포스 (Brute Force): 반복문과 조건문을 사용하여 모든 경우의 수를 단순하게 탐색하는 방법특징: 구현이 간단하고 문제의 해가 존재한다면 반드시 찾을 수 있음장점: 구현이 쉽고 정확한 결과를 얻을 수 있음단점: 문제의 크기가 커질수록 효율이 급격하게 저하백트래킹 (Backtracking): 답을 찾는 과정에서 불필요한 경로를 제거하면서 탐색하는 방법특징: 부분적인 해가 정답에 도달할 수 없는 경우 해당 경로를 포기하고 다른 경로 탐색장점: 불필요한..

[Programmers] 지게차와 크레인 JAVA

[Programmers] 지게차와 크레인 - LV 2접근dfs풀이코드챌린지 1차 예선의 3번째 문제 지게차와 크레인 문제이다. 컨테이너가 배열로 주어지고 지게차와 크레인을 사용해 컨테이너를 꺼내고 난 뒤 남아있는 컨테이너의 개수를 반환하는 문제이다. 간단한데 헷갈리는 부분이 있어 헤맸던 문제이다. 크레인은 단순히 요청하는 컨테이너를 모두 제거하면 되기 때문에 간단한 작업이다. 문제는 지게차를 이용한 작업으로 지게차로 컨테이너를 제거하기 위해서는 컨테이너의 4면 중 한 면이 외부와 연결되어 있어야 한다. 단순히 컨테이너의 4면 중 한 면이 공백과 닿아있는 것이 아니라 그 공백이 외부와 닿아있어야 한다는 것이 중점이다.  또 다른 주의 사항인 지게차 작업에만 해당되는 내용으로 작업이 수행되는 request의..

728x90