본문 바로가기

전체 글

(67)
Java Coding Convention 핵심만 알아보기 Coding Convention이란? 코딩 컨벤션은 프로그래머 사이의 코드를 작성하는 양식입니다. 개발자마다 미묘하게 코드를 작성하는 방식이 다르죠. 좁게는 괄호의 위치, indent 간 스페이스의 개수부터 시작해서, 넓게는 변수, 클래스, 객체의 이름을 짓고 javadoc을 작성하는 것까지 Convention에 해당합니다. 우아한 테크코스에서는 Google 자바 코딩 컨벤션을 참고하였으나 거기에 추가 요구사항(indentation, 열너비의 변경사항)을 반영한 컨벤션으로 코드를 작성해야 했습니다. 사실 IDE에는 내장된 formatter를 사용해서 대략적인 컨벤션에 맞춰 자동으로 코드를 수정해주는 기능이 있습니다. IntelliJ에서는 Ctrl + Alt + L를 통해서 코드 양식을 맞출 수 있습니다...
반효경 운영체제 - 3. 프로세스 관리 프로세스 생성 부모 프로세스가 자식 프로세스 생성 복제 생성을 한다. 1대 n의 관계 구조가 트리형태로 구성된다. 프로세스는 자원을 필요로 한다. 운영체제로부터 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델(원칙) 수행(Execution) 부모와 자식은 공존 자식이 종료될 때까지 부모가 기다리는(wait, blocked) 모델 주소 공간 자식은 부모의 공간을 복사함 (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림 유닉스의 예 fork() 시스템 콜이 새로운 프로세스를 생성 부모를 그대로 복사 (OS data except PID + binary) 주소 공간 할당 fork 다음에 이어지는 exec ..
42서울(42Seoul) 라피신 후기 10월에 공식 퇴사를 하게되었고, 퇴사 절차 진행 중에 여러 부트캠프를 알아보고 있었습니다. 그 중 신청했었던 42서울 프로그램에 마침 퇴사날짜와 딱 맞춰 라피신 기간이 겹쳐, 운좋게 참여하게 되었습니다. 정말 운이 좋았습니다. 라피신은 프랑스어로 '수영장'이라는 뜻이라고 합니다. 42서울은 교사, 교재, 수업이 없는 3無 교육을 지향한다고 하는데요, 그래서 이 4주의 기간은 42서울의 교육 철학을 그대로 반영한 교육이자 평가입니다. 마치 아무것도 없이 수영장에 던져진 것처럼 교육생들은 아무것도 없이 동료들과 함께 지식을 습득하고 문제를 해결해 나가야합니다. 코딩을 배우는 과정이 수영을 배우는 과정과 비슷한 셈이네요. 휴일 없이 4주 동안 매일 클러스터에서 동료학습을 통해 성장한다는 것이 정말 특이했습니..
ArrayList의 동적 배열 할당 원리 (Java) ArrayList는 어떻게 동적으로 늘어날까요? LinkedList는 ArrayList 대비 add/delete가 빠르다는 장점이 있다고 알려져있습니다. ArrayList의 마지막 요소에 add 메서드를 실행하면 시간 복잡도가 O(1)이라고 알려져있는데, 정적 할당된 배열의 사이즈를 바꾸는 것은 새로운 정적 배열을 선언 후 복사해야하기 때문에 O(n)이 됩니다. 사실 요소를 하나하나 삽입할 때마다 배열을 재할당하면 연산량이 엄청나겠죠. 분명 내부적으로 리사이즈하는 주기를 별도로 두었을거라는 생각이 들었습니다. 자세히 살펴보기에 앞서, 먼저 Array와 ArrayList의 차이점을 알아봅시다. Array와 ArrayList의 차이 Array는 크기가 고정되어있는 정적배열, arrayList는 동적 배열이다..
배열의 메모리는 연속일까? 메모리 주소 조회 (Java) 메모리의 계층 구조와 배열 자바에서 메모리는 어떻게 관리될까요? code - data - heap - stack의 계층으로 메모리는 저장됩니다. 우리가 배열의 인스턴스를 생성한다고 생각해봅시다. 여기서 우변의 new int[10]은 length가 10인 int 배열의 인스턴스를 생성한다는 의미입니다. 자바에서 new를 사용한 인스턴스 생성은 동적할당을 의미하므로 heap 영역에 생성됩니다. 좌변의 numbers는 4 byte의 용량을 가진 참조변수입니다. 어느 객체를 참조하던지 상관없이 참조변수는 항상 같은 크기로 할당됩니다. 따라서 참조변수를 저장하는데 필요한 메모리 공간은 compile 시에 결정할 수 있습니다. 컴파일 타임에 결정되는 지역 변수, 매개 변수는 stack에 저장되죠. int[] num..
반효경 운영체제 - 2.2 쓰레드 쓰레드의 정의 “A thread (opr lightweight process) is a baic unit of CPU utilization.” Thread의 구성 program counter - 작업 위치 register set - CPU의 작업 공간 stack space - 작업 위치에 따른 함수 호출 순서 Thread가 동료 thread와 공유하는 부분(task) code section data section OS resources 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 쓰레드는 하나의 프로세스에서 CPU가 실행하는 곳을 여러개, 프로그램 카운터를 여러개 두어 CPU 수행 단위를 여러 개로 두는 것을 멀티 쓰레드라고 함. 동일한..
반효경 운영체제 - 2.1 프로세스 프로세스의 개념 프로세스의 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter - 어디까지 실행했는가? 각종 Register 프로세스의 주소 공간 stack, data, code 등 메모리에 담겨있는 내용 프로세스 관련 커널 자료 구조 PCB (Process Control Block) Kernel stack System call 발생 시 프로세스 별 별도의 스택프로세스 관련 커널 자료 구조 프로세스의 상태 프로세스는 상태가 변경되며 수행된다. Running CPU를 잡고 instruction을 수행 중인 상태 Ready CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족) Blocked (wait, sleep) CPU를 주어도 당장 instruction을 수행할 수 없는 상..
반효경 운영체제 - 1. 시스템 구조와 프로그램 실행 컴퓨터 시스템 구조 Computer CPU 매 클럭 마다 메모리에서 인스트럭션을 하나씩 읽어서 수행 registers : 메모리보다 빠른 정보를 저장할 수 있는 공간 mode bit interrupt line : CPU는 메모리와만 상호작용함. 인스트럭션 실행 완료 후 interrupt line을 확인한다. Memory I/O device와 상호작용이 필요할 때, 프로그램은 권한을 OS에게 반환한다. 사용자 프로그램은 I/O 장치에 직접 접근 불가하므로 운영체제를 통해서만 요청을 수행할 수 있다. I/O 컨트롤러가 요청이 완료되었음을 확인하고 CPU에게 인터럽트를 발생시킨다. 입력된 buffer 메모리를 프로그램 메모리 공간에 copy한다. Timer OS가 cpu를 점유하다가, 사용자 프로그램에 타이머..