Java

🔍 변수의 스코프(Scope)란?변수의 스코프(Scope)란 변수가 선언된 위치에 따라 접근할 수 있는 범위를 의미합니다. 적절한 스코프 설정은 메모리 사용 최적화, 코드 가독성 및 유지보수성 향상시키는 데 중요한 역할을 합니다.🏷️ 변수의 종류에 따른 스코프자바에서 변수는 선언 위치에 따라 지역변수(Local Variable), 멤버 변수(Member Variable)로 나뉘며, 멤버 변수는 다시 클래스 변수(Class Variable)와 인스턴스 변수(Instance Variable)로 구분됩니다.📌 지역 변수(Local Variable)특정 블록 {} 내에서만 사용할 수 있는 변수입니다.메서드 내에서 선언된 변수들은 해당 메서드 내에서만 접근이 가능합니다.블록이 끝나면 메모리에서 자동으로 해제..
다형성(Polymorphism)의 개념과 원리다형성은 객체지향 프로그래밍의 핵심 개념 중 하나로, 동일한 메서드 호출이 객체의 실제 타입에 따라 다르게 동작할 수 있도록 합니다. 이를 통해 다양한 객체를 일관된 방식으로 처리할 수 있으며, 코드의 유연성과 확장성을 극대화할 수 있습니다.다형성의 구현 방식컴파일 타임 다형성 : 메서드 오버로딩을 통해 구현됩니다. 메서드 이름은 동일하지만 서로 다른 매개변수를 받는 여러 메서드를 정의하며, 호출 시점에 적합한 메서드가 선택됩니다.public class MathUtil { public int add(int a, int b) { return a + b; } public double add(double a, double b) { ..
추상화(Abstraction)란?추상화는 복잡한 현실 세계의 객체를 프로그램에서 다루기 쉽도록 필수적인 속성과 기능만을 남기고, 세부 사항은 감추는 과정입니다. 객체의 중요한 속성에 집중하고, 불필요한 세부 사항을 감춰서 설계의 간결함을 유지할 수 있습니다. 이는 객체지향의 중요한 개념 중 하나로 프로그램의 유지보수성을 높이고, 향후 확장성을 고려한 설계를 가능하게 합니다.추상 클래스 개념 및 작성 방법추상 클래스는 공통적인 속성이나 메서드를 정의하는 동시에, 일부는 구체적으로 구현하지 않고 하위 클래스에서 구현을 강제하는 클래스입니다. 추상 클래스는 직접 인스턴스를 생성할 수 없고, 반드시 상속받은 자식 클래스에서 구체화되어야 합니다. 추상 클래스는 abstract 키워드를 사용해서 정의합니다. 추상 ..
📝 절차지향 프로그래밍이란?절차지향 프로그래밍은 프로그램을 순차적인 절차로 구성하는 방법입니다. 이 방식은 주로 기능 중심으로 코드를 작성하며, 각 함수가 순차적으로 실행됩니다. 프로그램의 흐름을 제어하는 함수들을 통해 작업을 처리하는 방식입니다. 🔑 절차지향의 주요 특징순차적 처리 : 프로그램이 위에서 아래로 순서대로 실행됩니다.함수 중심 : 코드의 기능을 수행하는 독립적인 함수로 구성됩니다.데이터와 함수의 분리 : 함수와 데이터가 서로 독립적인 형태로 존재합니다.  🖥 절차지향 방식의 예시int add(int a, int b) { return a + b;}int main() { int result = add(5, 10); printf("Result: %d\n", result); ..
Stack이란?Java에서 Stack은 후입선출(LIFO, Last In First Out) 방식으로 요소를 관리하는 자료구조입니다.새로운 요소가 추가될 때마다 스택의 가장 상단에 쌓이며, 데이터를 꺼낼 때는 가장 최근에 추가된 요소부터 제거됩니다.Stack의 사전적 정의'쌓다', '쌓이다'로 물건을 쌓아 올리는 것처럼 데이터를 순서대로 쌓는 자료구조입니다.Stack의 주요 특징후입선출(LIFO) : Stack은 가장 최근에 추가된 요소가 가장 먼저 제거됩니다.Vector 기반 구현 : Java의 Vector 클래스를 상속받아 구현되었으며, 모든 기능을 활용할 수 있습니다.동기화 지원 : Vector를 상속받았기 때문에 기본적으로 동기화되어 있으며, 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.단방..
Java Vector : 멀티스레드 환경에서 안전한 리스트 구현체Java에서 Vector는 List 인터페이스를 구현한 동기화된(synchronized) 자료구조입니다. Vector는 동시성 제어가 필요한 멀티스레드 환경에서 안전하게 사용할 수 있는 리스트 구현체로, ArrayList와 유사한 구조를 가지고 있습니다.Vector란?Vector는 Java의 초기부터 존재했던 클래스로, List 인터페이스를 구현하며, 동기화(synchronization)가 보장되는 특징을 가집니다. Vector는 ArrayList와 유사하게 동적 배열을 기반으로 하지만, 내부의 모든 메서드가 동기화되어 멀티스레드 환경에서 안전하게 동작합니다.Vector의 주요 특징동기화된 메서드 : Vector의 모든 메서드는 동기화되어 ..
선택 정렬[Selection Sort]선택 정렬은 정렬 알고리즘 중에서 이해하기 쉽고 기본적인 알고리즘 중 하나입니다. 선택 정렬은 배열에서 가장 작은(또는 가장 큰) 원소를 찾아서 정렬되지 않은 부분의 첫 번째 원소와 교환하는 과정을 반복하는 방식으로 동작합니다.가장 작거나 큰 원소를 선택하고 그 위치를 바꿔주기 때문에 선택 정렬이라는 이름을 사용합니다.선택 정렬의 특징선택 정렬은 비교 정렬에 속하며, 제자리 정렬(in-place sort)입니다. 즉, 추가적인 메모리 공간을 거의 사용하지 않고, 주어진 배열 안에서 원소를 교환하여 정렬을 수행합니다. 선택 정렬은 대규모 데이터 세트에는 비효율적일 수 있지만, 알고리즘의 동작 원리를 이해하는 데 매우 유용한 도구입니다.선택 정렬의 과정이 과정은 정렬되지..
위상정렬사이클이 없는 방향 그래프(DAG)의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 것입니다.진입 차수(Indegree) : 특정한 노드로 들어오는 간선의 개수진출 차수(Outdegree) : 특정한 노드에서 나가는 간선의 개수큐를 이용하는 위상 정렬 알고리즘의 동작 과정진입차수가 0인 모든 노드를 큐에 넣습니다.큐가 빌 때까지 다음의 과정을 반복합니다.큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거합니다.새롭게 진입차수가 0이 된 노드를 큐에 넣습니다.결과적으로 각 노드가 큐에 들어온 순서가 위상 정렬을 수행한 결과와 같습니다.위상 정렬 특징위상 정렬은 DAG에 대해서만 수행할 수 있습니다.DAG(Direct Acyclic Graph) : 순환하지 않는 방향 그래프위상 ..
클라이언트 IP 가져오기 서버로의 요청이 프록시나 로드 밸런서를 거칠 때 클라이언트의 실제 IP 주소를 정확하게 가져오는 방법에 대해 알아보겠습니다. 기본적인 방법과 프록시 서버, 로드 밸런서 등의 환경에서 사용할 수 있는 방법을 설명하겠습니다. 기본 방법 : request.getRemoteAddr() 가장 기본적인 방법으로 HttpServletRequest 객체의 getRemoteAddr() 메서드를 사용하면 클라이언트의 IP 주소를 가져올 수 있습니다. import javax.servlet.http.HttpServletRequest;private String getClientIpAddress(HttpServletRequest request) { request.getRemoteAddr();} 이..
Java LinkedList : 효율적인 데이터 삽입과 삭제를 위한 연결 리스트Java에서 LinkedList는 List 인터페이스를 구현한 또 다른 중요한 자료구조입니다. LinkedList는 이중 연결 리스트(doubly linked list)로 구현되어 있어, 삽입과 삭제가 빈번한 경우 특히 유용합니다.LinkedList란?LinkedList는 List 인터페이스와 Deque 인터페이스를 구현한 클래스입니다. 이 자료구조는 이중 연결 리스트를 기반으로 하며, 각 요소가 자신과 다음 요소의 참조(reference)를 포함한 노드(node)로 구성됩니다. 배열과 달리 요소들이 물리적으로 연속된 위치에 저장되지 않으며, 삽입 및 삭제 작업이 효율적으로 수행됩니다.LinkedList의 주요 특징빠른 삽입과..
Gyunny
'Java' 태그의 글 목록