본문 바로가기
반응형

전체 글881

[Java] 배열 복사 안녕하세요. 개발자 블로그 codeomni입니다. 이번 포스팅은 자바에서 배열의 복사입니다. 배열은 자료구조 특성상 크기가 고정되어 있으므로 확장할 경우에 새로운 공간을 추가하고 기존에 있던 항목들을 가져와야합니다. 자바에서는 배열의 항목을 복사하는 방법으로 for문을 통한 방법과 System.array.copy() 메소드를 사용하는 방법이 있습니다. 주의점 복사한 값을 제외한 나머지 배열의 원소들은 배열의 자료형의 초기값입니다. 참조 타입의 배열은 주소값을 복사하므로 원본 배열과 새배열은 같은 객체를 참조합니다. (얕은 복사[shallow copy]) 따라서 배열의 내부 객체가 변경되면 원본과 복사본 모두 영향을 받게 됩니다. 1. for문으로 배열 복사 원본 배열과 복사한 배열의 인덱스로 접근해서 원.. 2024. 3. 18.
[spring] 스프링 DI (Dependency Injection) 안녕하세요. 이번 포스트의 주제는 스프링 DI(Dependency Injection)입니다. 스프링 프레임워크에서 제공하는 IoC를 구현하기 위해 사용하는 방법입니다. 객체 간의 의존성을 직접 코드 내에서 설정하는 것이 아니라 외부에서 주입하는 방식입니다.@Autowired 어노테이션을 사용하면 스프링 IoC 컨테이너는 해당 클래스의 객체를 생성할 때, 의존성이 필요한 부분에 필요한 Bean을 주입해줍니다. 1. 생성자 주입(Constructor Injection) 객체의 생성자를 통해 의존성을 주입하는 방식입니다. @Autowired 어노테이션을 사용해서 의존성을 주입합니다. 1 2 3 4 5 6 7 8 public class MyService { private final MyRepository myR.. 2024. 1. 25.
[Java] 자바 Array - 배열 선언 생성 초기화 요소 접근 길이 안녕하세요. codeomni입니다. 이번 포스트의 주제는 자바의 데이터 타입인 Array입니다. 자바에서 배열은 동일한 데이터 타입의 여러 값을 저장한느 데 사용되는 자료 구조입니다. 고정된 크기를 가지고, 인덱스를 통해 각 요소에 접근할 수 있습니다. 인덱스의 번호는 0번부터 시작합니다. 1. 배열의 선언 배열을 사용하기 위해 데이터타입[ ] 변수이름; 또는 데이터타입 변수[ ]; 형식으로 선언합니다. 1 int[] numbers1; 1 int numbers2[]; 2. 배열의 생성 배열은 참조 변수로 배열 변수는 스택 영역에 생성되고 힙 영역에 생성되는 배열 객체를 참조합니다. 배열의 생성은 배열 리터럴과 new 연산자를 통해서 생성합니다. 1 int[] numbers = {1, 2, 3, 4, 5}.. 2024. 1. 21.
[Java] 자바 String 문자열 비교 - String equals(), null 사용 안녕하세요. codeomni입니다. 이번 포스트의 주제는 String 변수입니다. 자바에서 문자열은 String 데이터 타입으로 사용합니다. 내장 클래스로 java.lang 패키지에 포함되어 있습니다. 1. String 생성 1 String name; 문자열 변수의 생성은 String 클래스를 사용합니다. 2. 문자열 대입 1 String name = "codeomni"; 생성한 String 변수에 ""(큰따옴표)를 사용해서 문자 리터럴을 넣습니다. 이 때 주의할 것은 원하는 이름으로 지정한 변수는 스택 영역에 생성되고 ""(큰따옴표)으로 된 문자열 리터럴은 힙 영역에 String 객체로 생성됩니다. 스택영역의 변수가 힙 영역의 String 객체를 참조하고 있습니다. 3. String 생성과 동시에 참조.. 2024. 1. 20.
[Java] 자바 NullPointerException 안녕하세요. codeomni입니다. 이번 포스트의 주제는 NullPointerException입니다. 자바에서 NullPoinerException은 Runtime에서 발생하는 예외입니다. 데이터 타입(Data Type)에는 기본 타입과 참조 타입이 있는 데, 여기서 null인 참조 타입의 변수를 사용하면 발생하는 오류입니다. 메소드 호출 시 null 참조, 배열에서 null 참조, 객체 필드에서 null 참조, 메소드 반환 값이 null 참조 등 상황에서 발생할 수 있습니다. 1. 메소드 호출 시 null 참조하는 경우 1 2 3 4 5 6 7 8 package test; public class Example { public static void main(String[] args) { String str.. 2024. 1. 19.
[GitHub Copilot] 깃허브 코파일럿 구독 취소하기 안녕하세요. codeomni입니다. 이번 포스트의 주제는 깃허브의 Copilot 구독 취소하기입니다. Copilot의 성능은 너무 좋지만, 공부에 있어서 본인에게 도움이 되지 않아서 구독을 취소했습니다. 깃허브 홈페이지에서 다음의 과정으로 구독을 취소합니다. 깃허브 페이지에서 오른쪽 상단에 위치한 프로필을 클릭합니다. 메뉴 중에서 Settings를 클릭합니다. 왼쪽 메뉴에서 Billing and plans에서 Plans and usage를 클릭합니다. Add-ons의 GitHub Copilot에서 Manage subscription의 Cancel을 클릭합니다. 설문이 나오고 스크롤하면 하단에서 I understand, cancel GitHub Copilot 버튼을 클릭합니다. 다음달의 지불 금액이 변경되.. 2024. 1. 15.
[AWS] EC2 프리 티어 사용량 확인하기 - 현재 사용량, 예상 사용량 안녕하세요. codeomni입니다. 이번 포스트의 주제는 AWS에서 프리 티어 사용량 확인하기입니다. 먼저, 아래 링크의 콘솔 홈에 접속합니다. https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2# https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2 ap-northeast-2.console.aws.amazon.com 검색 창에서 프리 티어를 입력합니다. 특징에 있는 프리 티어를 클릭합니다. AWS 프리 티어로 사용하고 있는 서비스의 목록과 현재 사용량을 확인할 수 있습니다. 단, 현재 사용량이 실제 사용한 것보다 업데이트.. 2024. 1. 2.
[AWS] WARNING: UNPROTECTED PRIVATE KEY FILE 오류 처리 안녕하세요. codeomni입니다. 이번 포스트의 주제는 AWS에서 UNPROTECTED PRIVATE KEY FILE 오류 처리입니다. 1 2 3 4 5 6 7 8 9 (base) codeomni@codeomni ~ % ssh -i /Users/codeomni/Downloads/pint.pem ubuntu@000.000.000.000 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0777 for '/Users/codeomni/Download.. 2024. 1. 1.
[PintOS] 핀토스 뽀개기 - Threads 2 - Priority Scheduling 틀린 내용은 댓글 부탁드립니다. 목표 CPU가 우선순위에 상관없이 ready_list에 들어온 순서대로 쓰레드가 점유하는 라운드 로빈 스케줄링 방식으로 각각의 쓰레드가 할당 시간만큼 할당하고 주어진시간이 지나가면 ready_list의 맨 뒤로 이동합니다. 1 2 3 4 5 6 7 8 /* /threads/thread.c */ static struct thread * next_thread_to_run (void) { if (list_empty (&ready_list)) return idle_thread; else return list_entry (list_pop_front (&ready_list), struct thread, elem); } ▲ CPU를 점유 시 ready_list의 첫 번째 쓰레드가 점유.. 2023. 12. 17.
[PintOS] 핀토스 뽀개기 - Threads 틀린 내용은 댓글 부탁드립니다. 구현 단계 프로젝트 1의 Threads에서 3 부분의 구현 단계를 거칩니다. 1. Alarm clock https://codeomni.tistory.com/945 2. Priority Scheduling Priority Scheduling https://codeomni.tistory.com/946 [PintOS] 핀토스 뽀개기 - Threads - Priority Scheduling 틀린 내용은 댓글 부탁드립니다. 목표 CPU가 우선순위에 상관없이 ready_list에 들어온 순서대로 쓰레드가 점유하는 라운드 로빈 스케줄링 방식으로 각각의 쓰레드가 할당 신간만큼 할당하고 주어 codeomni.tistory.com Priority Scheduling and Synchroni.. 2023. 12. 16.
[Java] 자바 기초 4 - 조건문 이번 포스트는 자바의 조건문입니다. 자바에서 조건문은 조건을 검사하고 조건에 따라 코드 블록을 실행하는 제어 구조입니다. 특정 조건에서 따라 다른 작업이 수행됩니다. 1. if 문 주어진 조건이 참( true )일 경우 코드 블록을 실행합니다. 거짓인 경우에는 해당 코드 블록을 실행하지 않습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Example { public static void main(String[] args) { int num = 17; // 조건이 참인 경우 if (num > 16) { System.out.println("num은 16보다 큽니다."); } // 조건이 거짓인 경우 if (num > 20) { System.out.println("n.. 2023. 12. 1.
JDK와 JRE 차이 이번 포스트는 JDK와 JRE 차이입니다. JDK(Java Development Kit)과 JRE(Java Runtime Environment)는 모두 Java로 프로그램을 개발하는데 중요한 요소로 공통점이 있지만 역할이 다릅니다. JDK는 프로그램을 개발에 필요한 도구를 제공하고, JRE는 프로그램을 실행에 필요한 환경을 제공합니다. 또한, 개발자는 JDK로 소스 코드를 작성, 테스트하고, 사용자는 JRE로 자바 애플리케이션을 실행합니다. JDK(Java Development Kit) 자바를 사용해서 소프트웨어를 개발에 필요한 도구와 라이브러리 모음으로 JDK를 사용해서 소스 코드를 작성하고 컴파일한 다음에 배포할 수 있습니다. 자바 컴파일러(javac) - 자바 소스 코드를 바이트 코드로 변환하는 컴.. 2023. 12. 1.
[Eclipse] the project cannot be built until build path errors are resolved 오류 처리 이클립스 프로젝트 the project cannot be built until build path errors are resolved 오류 처리입니다. 자바 실행 환경(JRE - Java Runtime Environment)을 찾을 수 없는 문제로 설치된 JDK를 변경해줍니다. Problems창에서 the project cannot be built until build path errors are resolved 에러 메시지가 표시됩니다. 에러가 있는 프로젝트에서 마우스 우클릭합니다. Properties를 클릭합니다. 왼쪽 탭에서 Java Build Path를 클릭한 다음에 Libraries의 탭을 클릭합니다. JRE System Library를 클릭한 다음에 Edit 버튼을 클릭합니다. Workspac.. 2023. 11. 30.
[C] 자료구조 - 기본 트리(LCRS Tree - LeftChildRightSibling Tree) 스택과 큐는 데이터의 삽입과 삭제를 한 쪽에서만 한다는 단점을 가지고 있습니다. 양쪽 방향에서 하면 더 효율적이지 않을까요 스택과 큐에서 정했던 Front와 Rear에 모두 데이터의 삽입과 삭제를 해주는 자료 구조가 바로 덱입니다. LCRS 트리 구조체 만들었던 자료 구조들은 모두 노드를 통해 데이터를 처리했습니다. 트리도 마찬가지로 노드와 간선으로 구성되므로 노드 구조체를 만들어 줍니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 트리 데이터 타입 정의 typedef char ElementType; // 트리 노드 구조체 typedef struct LCRSNode { // 왼쪽 자식 노드를 가리키는 포인터 struct LCRSNode* LeftChild; // 오른쪽 형제 노드를 .. 2023. 11. 17.
[C] 자료구조 - 연결 리스트 큐 (Linked List Queue) 배열로 작성한 원형 큐는 한 번에 용량을 받아서 생성합니다. 아무리 큐의 Rear와 Front가 연결되어 있다고 해도 큐가 다 차는 경우에는 크기를 변경할 수 없다는 단점을 가지고 있습니다. 큐의 용량의 제한 없이 동적으로 생성할 수 있는 연결 리스트로 구현하는 큐가 필요합니다. 연결 리스트 큐 구조체 데이터를 저장하고 관리하기 위한 노드 구조체를 만듭니다. 1 2 3 4 5 6 7 8 9 // 큐 데이터 타입 정의 typedef int ElementType; // 연결 리스트 큐 노드 구조체 typedef struct Node { ElementType Data; struct Node* NextNode; } Node; 연결 리스트를 사용한 큐는 다음 노드를 가리킬 포인터가 필요합니다. 작성한 노드 구조체.. 2023. 11. 15.
[C] 자료구조 - 원형 큐 (Circular Queue) 배열로 만든 선형 큐는 데이터가 나오는 Front가 마지막의 인덱스에 도달할 경우 앞에 데이터를 넣을 수 있지만, 큐가 가득 찼다고 판단합니다. ㅁㅁㅁㅁFront 이런 문제를 해결하기 위해서 배열의 처음과 끝을 연결하면, Rear가 배열의 앞으로 변경되어 데이터를 넣을 수 있습니다. 또한 미리 할당한 메모리만 사용하기 때문에 관리가 간편하며, 동적 할당과 해제에 필요한 오버헤드가 없어집니다. 원형 큐 구조체 데이터를 저장하고 관리하기 위한 노드 구조체를 만듭니다. 1 2 3 4 5 // 노드 구조체 typedef struct Node { ElementType Data; } Node; 배열을 사용한 원형 큐이기 때문에 연결 리스트처럼 다음 노드를 가리킬 포인터가 필요없습니다. 이제 노드를 만들었고 원형 큐.. 2023. 11. 13.
[C] 자료구조 - 연결 리스트 스택 (Linked List Stack) 구현한 배열 스택(Array Stack)은 자유 저장소에 동적으로 생성되지만, 한 번에 용량을 전달 받아서 생성하게 됩니다. 전달 받은 용량만큼 스택을 사용할 수 있고, 배열인만큼 크기를 변경할 수 없다는 단점을 가지고 있습니다. 링크드 리스트는 배열의 크기 고정에 대한 단점을 보안합니다. 배열 스택의 단점을 보안하기 위해 연결 리스트를 사용한 링크드 리스트 스택을 구현합니다. 연결 리스트 스택 구조체 배열 스택과 다르게 연결 리스트 스택은 인덱스로 접근하지 않고 노드안의 포인터를 사용합니다. 연결 리스트처럼 스택의 노드 구조체 안에 다음 노드를 가리킬 Next 포인터를 만들어줍니다. 1 2 3 4 5 6 // 스택의 노드 구조체 typedef struct Node { ElementType Data; s.. 2023. 11. 12.
[C] 자료구조 - 배열 스택 (Array Stack) 이번 주제는 스택(Stack)입니다. 스택은 선입후출(First In Last Out)의 구조로 먼저 들어간 데이터보다 나중에 들어간 데이터가 먼저 나오는 자료구조입니다. 뒤로 가기와 앞으로 가기의 기능 구현 등을 포함한 우리가 사용하고 있는 여러 프로그램에서 볼 수 있습니다. 스택은 배열과 링크드 리스트로 구현 가능 합니다. 그 중에서 배열은 구현이 쉽다는 장점과 용량을 동적으로 할당할 수 없다는 단점을 가지고 있습니다. 배열 스택 구조체 이전에 구현했던 자료들처럼 스택을 구성하는 노드들을 만듭니다. 1 2 3 4 5 // AS 노드 typedef struct Node { ElementType Data; } Node; 배열 스택을 구성하는 노드 구조체입니다. 연결 리스트처럼 다음 노드의 위치를 저장할 .. 2023. 11. 9.
[C] 자료구조 - 원형 연결 리스트(Circular Linked List - CLL) 단일 연결 리스트와 이중 연결 리스트는 원형 연결 리스트는 연결 리스트에서 Tail이 Head를 가리키는 데이터 구조입니다. Head와 Tail의 이동이 간단하고, 다시 탐색할 필요가 없습니다. 노드들이 고리처럼 연결되어 있어 무한 루프를 사용해서 반복적으로 순회할 수 있습니다. 따라서 순환과 반복 작업의 무한 스크롤 인터페이스 등에서 사용할 수 있습니다. 이중 연결 리스트의 노드 구체의 수정없이 구현할 수 있습니다. 단일에서 이중 연결 리스트로 구현에서는 이전 노드의 주소를 저장하고 있는 포인터를 추가했지만, 원형 연결 리스트는 단순히 Head의 Prev 포인터가 NULL이 아니라, Tail을 가리키면 됩니다. 물론 Tail의 Next 포인터는 Head를 가리키면 됩니다. 원형 연결 리스트의 연산 자료.. 2023. 10. 31.
[C] 자료구조 - 이중 연결 리스트(Doubly Linked List - DLL) 단일 연결 리스트는 다음 노드를 가리키는 포인터가 1개입니다. 특정 노드를 찾기 위해서 Head부터 Tail까지 순차적으로 탐색해야 한다는 단점이 있습니다. 따라서 현재 노드에서 이전 노드로 돌아갈 수 없고 다시 Head부터 탐색이 필요합니다. 이중 연결 리스트는 노드를 가리키는 포인터를 1개 추가하여 탐색을 보안하였습니다. 다음 노드를 가리키는 포인터뿐만 아니라 이전 노드를 가리키는 포인터를 추가하는 방법입니다. 1 2 3 4 5 6 typedef struct tagNode { int Data; struct tagNode* PrevNode; struct tagNode* NextNode; } Node; ▲ 이전 노드를 가리키는 포인터 변수를 추가해줍니다. 이중 연결 리스트의 연산 자료구조를 사용할 때는 .. 2023. 10. 30.
[Coding Test] 시간 복잡도 - 빅오표기법 보호되어 있는 글 입니다. 2023. 10. 29.
[Coding Test] python3 enumerate() 사용하기 보호되어 있는 글 입니다. 2023. 10. 25.
[C] 자료구조 - 단일 링크드 리스트(Single Linked List - SLL) C언어에서는 배열은 크기의 고정으로 유연하게 변경할 수 없다는 단점이 있습니다. 이를 해결하기 위해 리스트의 자료구조를 사용합니다. 리스트는 스택, 큐 등의 자료 구조를 구현에 사용됩니다. 링크드 리스트(Linked List) 링크드 리스트는 각 노드의 연결로 구성되어 있습니다. 노드는 데이터를 보관하는 필드와 다음 노드를 연결해줄 포인터로 구성됩니다. ▲ 단일 노드의 구성 노드를 여러 개를 만들고 포인터에 다음 노드에 대한 포인터를 사용하면 연결 리스트가 됩니다. 연결 리스트의 맨 앞 노드는 Head이고, 마지막 노드는Tail입니다. ▲ 연결 리스트의 구성 이렇게 노드를 통해 연결을 해주면, 필요할 경우 새 노드를 만들어서 연결해주면 됩니다. 구현 그럼 C 언어로 노드를 표현해봅시다! 1 2 3 4 5.. 2023. 10. 19.
[PintOS] 핀토스 뽀개기 5 - APPENDIX (1) 보호되어 있는 글 입니다. 2023. 9. 23.
[PintOS] 핀토스 뽀개기 4 - FILE SYSTEM 보호되어 있는 글 입니다. 2023. 9. 23.
[PintOS] 핀토스 뽀개기 3 - VIRTUAL MEMORY 보호되어 있는 글 입니다. 2023. 9. 23.
[PintOS] 핀토스 뽀개기 2 - USER PROGRAMS 보호되어 있는 글 입니다. 2023. 9. 23.
[PintOS] 핀토스 뽀개기 0 - Introduction 보호되어 있는 글 입니다. 2023. 9. 22.
빅 엔디안(Big Endian) 리틀 엔디안(Little Endian) - 정의, 비교 빅 엔디안과 리틀 엔디안은 컴퓨터 아키텍처에서 데이터를 메모리에 저장하고 표현하는 주요 방식입니다. 엔디안 방식은 바이트 순서를 나타내며, 바이트 순서는 다중 바이트 데이터 타입을 메모리에 저장하는 방식을 설명합니다. 하드웨어와 프로세서의 설계 결정에 따라 정해지며, 서로 다른 방식의 시스템들은 데이터 교환 시 주의가 필요합니다. 네트워크 통신 및 파일 형식에서 엔디안 방식이 중요한 역할을 합니다. 데이터를 전송, 저장 시 올바른 방식으로 해석되기 위해서 엔디안 변환 작업이 필요한 경우도 있습니다. 빅 엔디안(Big Endian) 여러 개의 프로토콜과 파일 포맷이 사용하는 방식으로 가장 중요한 바이트(최상위 바이트)를 가장 낮은 주소에 저장하는 방식입니다. 사람이 숫자를 읽고 쓰는 방법과 같아서 디버깅 .. 2023. 9. 16.
cs - malloc 묵시적 가용 리스트(implicit availability list) 실용적인 할당기는 블록 경계를 구분하고, 할당된 블록과 가용 블록으로 구분하는 데이터 구조를 필요한다. 이 정보를 블록 내에 저장 한 개의 블록은 1워드의 헤더, 데이터, 추가적인 패딩으로 구성된다. malloc은 payload의 시작을 반환한다. 헤더는 블록 크기(헤더와 추가적인 패딩 포함)와 블록이 할당되었는지 가용 상태인지 인코딩한다. -> 더블 워드 정렬 제한조건을 부과한다면 블록 크기는 항상 8의 배수, 블록 크기의 하위 3비트는 항상 0이다. -> 남은 블록 크기의 상위 29비트만 저장할 필요가 있으며 나머지 3비트는 다른 정보를 인코드하기 위해 남겨둔다. 이 경우 블록이 할당되었는지 가용 상태인지를 나타내기 위해 최소 중요.. 2023. 9. 10.
반응형