Computer Science

Computer Science/Software Engineering

CRLF(CR + LF) vs LF(Line Feed)

개발을 하다 보면 협업 과정에서 코드는 똑같은데 에러가 나는 상황이 종종 발생한다. 특히 Windows와 macOS/Linux 환경을 오가면서 작업할 때 자주 발생하는 문제 중 하나가 바로 줄 바꿈(Line Ending) 문제이다. 이때 등장하는 개념이 CRLF와 LF이다. 결론부터 말하면 CRLF와 LF는 모두 줄 바꿈을 의미하지만, 표현 방식이 다르고 운영체제에 따라 사용하는 방식이 다르다. CRLF(CR + LF)와 LF(Line Feed)CRLF와 LF는 모두 개행 문자(Line Ending)이다. 즉, 한 줄이 끝나고 다음 줄로 넘어간다는 것을 표현하는 방식이다.각각의 정의는 다음과 같다. 그 전에 CR(Carriage Return)과 LF(Line Feed)가 뭔지 간단히 정리하면 다음과 같다..

Computer Science/Software Engineering

마샬링(Marshalling)과 직렬화(Serialization)

마샬링(Marshalling)은 객체나 데이터 구조를 전송 및 저장에 적합한 표준 형식으로 변환하는 과정이다. 이 개념은 분산 시스템과 네트워크 통신에서 필수적인 핵심 기술이다. 마샬링과 직렬화의 내용이 혼용되기 쉬워서 정리하려고 한다. 거기에 더해 언마샬링에 대해서도 간단하게 적어보았다. 마샬링(Marshalling)마샬링은 프로그램 내부 메모리에 존재하는 객체를 외부로 전달 가능한 형태로 바꾸는 과정이다. 메모리 구조는 프로세스마다 다르기 때문에 그대로는 다른 시스템이나 프로세스가 이해할 수 없다. 이 문제를 해결하기 위해 객체의 구조와 값을 JSON, XML, 바이너리 스트림과 같은 표준 포맷으로 변환하는 작업이 마샬링이다. 마샬링이 필요한 대표적인 이유 3가지를 간단하게 다음과 같이 정리할 수 ..

Computer Science/Algorithm

Sort(정렬) 알고리즘 정리

자주 사용하는 정렬 알고리즘들을 정리해보려 한다. 버블 정렬(Bubble Sort)정의: 인접한 원소들을 비교하여 큰 값을 뒤로 보내는 정렬시간복잡도: O(n²) - 삽입/삭제 후 재정렬 필요, 검색 O(n) 의사코드for i = 0 to n-2: for j = 0 to n-2-i: if arr[j] > arr[j+1]: swap(arr[j], arr[j+1]) 선택 정렬(Selection Sort)정의: 최솟값을 찾아 앞쪽부터 차례로 배치하는 정렬시간복잡도: O(n²) - 삽입/삭제 후 재정렬 필요, 검색 O(n)의사코드for i = 0 to n-2: min_idx = i for j = i+1 to n-1: if arr[j] 삽입 정렬(In..

Computer Science/OS(Operating System)

[Linux] 파일 디스크립터(File Descriptor)

파일 디스크립터(File Descriptor)파일 디스크립터(File Descriptor, FD)는 운영체제가 프로세스가 접근할 수 있는 파일, 소켓, 파이프 등을 구분하기 위해 부여하는 정수 값이다. 리눅스나 유닉스 계열 시스템에서 자주 사용되며, 시스템 콜(system call)을 통해 파일이나 네트워크 자원에 접근할 때 핵심적으로 활용된다. 간단히 말해, 프로세스 입장에서 파일 디스크립터는 파일을 가리키는 핸들(handle) 역할을 한다. 이 정수값을 통해 프로세스는 운영체제에게 어떤 파일에 어떤 작업을 수행할지를 요청할 수 있다. 프로세스가 시작되면, 기본적으로 세 개의 파일 디스크립터가 자동으로 열리게 된다.파일 디스크립터 번호이름설명0stdin표준 입력1stdout표준 출력2stderr표준 오..

Computer Science/Algorithm

[Python] 완전 탐색(Brute Force)

핵심 개념완전 탐색(Brute Force)은 가능한 모든 경우의 수를 전부 탐색하여 정답을 찾는 방법이다. 최적화 없이 모든 경우를 시도하기 때문에 구현이 간단하지만, 경우의 수가 많아지면 비효율적일 수 있다.  시간 복잡도완전 탐색의 시간 복잡도는 일반적으로 \( O(N!) \) 또는 \( O(2^N) \) 등 매우 높은 편이다. 예를 들어, n개의 요소가 있을 때 가능한 모든 순열을 탐색하는 경우 \( O(N!) \)이 된다. 따라서 입력 크기가 커질수록 실행 시간이 급격히 증가한다. 동작방식 & 구현완전 탐색은 보통 다음과 같은 방식으로 동작한다.가능한 모든 경우의 수를 생성한다.각 경우가 문제의 조건을 만족하는지 확인한다.원하는 결과를 찾으면 반환하거나 최적의 해를 갱신한다. 활용 가능한 문제 유..

Computer Science/Algorithm

[Python] 너비 우선 탐색(BFS, Breadth-First Search), 깊이 우선 탐색(DFS, Depth Frist Search)

핵심 개념DFS(Depth-First Search, 깊이 우선 탐색)와 BFS(Breadth-First Search, 너비 우선 탐색)는 그래프 탐색 알고리즘이다. DFS는 한 방향으로 끝까지 탐색한 후 돌아오는 방식이며, BFS는 가까운 노드부터 탐색하는 방식이다.  시간 복잡도두 탐색 방법의 시간 복잡도는 일반적으로 \( O(V + E) \)이다. 여기서 \( V \)는 vertex(or 노드) 개수, \( E \)는 edge(간선) 개수이다. DFS와 BFS 모두 모든 노드를 방문하기 때문에 그래프의 크기에 따라 탐색 시간이 결정된다. 동작방식 & 구현 DFS시작 노드에서 한 방향으로 갈 수 있는 만큼 탐색한다.더 이상 이동할 곳이 없으면 이전 노드로 돌아가 다른 경로를 탐색한다.모든 노드를 방문할..

AlienCoder
'Computer Science' 카테고리의 글 목록
loading