연산자(Operator) 연산자는 모든 프로그래밍 언어의 기본 구성 요소이다. 연산을 하는 데 있어 연산을 수행하는 기호인 연산자와 연산 수행의 대상이 되는 피연산자로 나눠지고 모든 연산자는 연산 결과를 반환하게 된다. Java에서는 기본적으로 산술 연산자부터 인스턴스 연산자까지 여러 가지 종류의 연산자를 제공하고 있다. 산술 연산자 연산자 결과 + 두 개의 숫자를 더한다. - 두 개의 숫자를 뺀다. * 두 개의 숫자를 곱한다. / 두 개의 숫자를 나누고 몫을 반환한다. % 두 개의 숫자를 나누고 나머지를 반환한다. int a = 5; int b = 3; // TODO: 산술 연산자 System.out.println(a + b); // 8 System.out.println(a - b); // 2 Syst..
리눅스 - vi 문서 편집기 리눅스에서 가장 중요한 문서 편집에 관한 정리를 해보려고 한다. 리눅스는 vi라는 문서 편집기가 있다. vi 편집기를 실행했을 때 바로 텍스트를 입력할 수 없는데 그 이유는 vi 편집기에는 여러 가지 모드가 있고, 해당 모드를 통해서 작업이 가능하기 때문이다. 문서 편집기를 사용할 때 윈도우에서 사용하는 메모장을 상상하면 쉽게 이해할 수 있다. 리눅스는 대표적인 CLI 방식 운영체제이기 때문에 마우스를 사용할 수 없어 드래그라는 개념이 존재하지 않는다. 대신, 커서를 통해서 드래그와 비슷한 작업을 할 수 있다. Command 모드 Command 모드는 3가지 모드 중에서 중간 경유지 역할을 하는 모드이다. 주요 특징으로는 Edit 모드와 LastLine 모드로 전환을 해준다...
리눅스를 사용하기 위한 여러 가지 명령어가 존재한다. 앞서 리눅스에 관해서 설명했던 것과 같이 리눅스는 대부분 실행 파일과 문서 파일로 존재하게 되고 디렉토리의 위치가 중요한 운영 체제라는 것을 앞서 설명했었다. 따라서, 리눅스에서 기본이 되는 명령어는 주로 파일 혹은 디렉토리와 관련된 명령어이다. 명령어를 설명하기에 앞서 리눅스는 대표적인 CLI로 우리가 일반적으로 사용하는 GUI와 방식이 다르기 때문에 코드로만 접근해서 사용해야 한다. 리눅스에서 명령어를 사용하면서 주의해야할 점으로는 영어 대소문자를 잘 확인해야 된다는 점이다. 리눅스를 공부하고 실습을 진행하면서 많이 한 실수 중 하나가 오타 실수와 대소문자를 잘못 적은 실수였다. :( 또 다른 주의할 점으로는 명령어는 하나의 프로그램이라는 것이다...
리눅스(Linux) 리눅스는 리눅스 커널을 기반으로 하는 오픈 소스 운영 체제이다. 여러 운영 체제(안드로이드 등)가 리눅스 커널 기반으로 만들어졌다. 리눅스의 특징 리눅스는 운영 체제 중 하나로 계층적 파일 시스템을 제공한다. 일반적으로 우리가 사용하는 윈도우와 차이점이라고 하면 디렉터리의 차이라고 할 수 있다. 윈도우는 최상위 디렉터리가 존재하지 않지만, 리눅스는 /(루트)라는 최상위 디렉터리가 존재한다. 리눅스는 기본적으로 하드웨어 위에 커널(운영체제)이 쉘(명령어)을 통해 애플리케이션(프로그램)을 실행하게 된다. 윈도우에서는 윈도우 탐색기(익스플로러)를 통해서 뭔가를 더블 클릭했을 때 운영체제로 전달해 주는 데 리눅스는 bash라는 쉘을 통해서 프로그램을 실행하게 된다. 리눅스를 처음 실행하게 되..
변수(Variable) 변수란 하나의 값을 저장할 수 있는 메모리 공간을 뜻한다. 변수의 타입에 따라서 값을 저장할 수 있는 메모리 공간의 범위가 달라진다. 변수의 선언 "변수타입 변수이름;"으로 선언을 해준다. 변수의 초기화 변수에 처음으로 값을 저장하는 것으로 "변수이름 = 값; "으로 초기화를 진행한다. 반드시 초기화를 할 필요는 없지만 만약 변수가 지역 변수라면 읽기 전에 꼭 초기화를 해야 한다. 해당 코드와 같이 같은 타입이라면 여러 개의 값을 동시에 초기화할 수 있다. 변수의 값을 읽어오기 위해서는 해당 값이 필요한 곳에서 변수의 이름을 적어준다. 변수의 타입 변수의 타입으로는 기본형과 참조형으로 나눠진다. 기본형 타입을 제외한 나머지 모든 타입은 다 참조형 타입이다. (값이 아닌 메모리 주소..
30일 공부에서 100일로 늘린 이유 이전에 30일간 자바 공부를 진행한 적이 있었다. 하루에 거의 3 ~ 4시간 정도 공부를 했는데 30일이란 시간이 조금 부족하다고 느껴졌다. 30일 동안 자바를 공부하면서 조금 깊이 있는 공부를 하지 못했다고 생각이 들었다. 그래서 기간을 조금 더 늘려서 공부를 더 해볼까 한다. 어떻게 진행할 것인지 30일간 공부하면서 자바 언어에 대한 기초 지식을 정리했었다. 이번에 공부할 때는 정리한 것을 다시 한번 복습하고 조금 더 지식을 추가하여 깊이를 늘려볼까 생각 중이다. 자바의 정석 책과 강의, 다른 교육 사이트를 참고하여 학습해 보고 내가 이해한 방식으로 정리하여 블로그에 올릴 계획이다. 공부를 하면서 느낀 것이 하나 있는데 바로 질문을 가지는 것이다. 만약 변수에 대..
트랜잭션(Transaction) 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 뜻한다. 데이터베이스에 접근하는 방법은 쿼리이므로, 여러 개의 쿼리들을 하나로 묶는 단위를 트랜잭션이라 말한다. ACID 데이터베이스의 일관성을 유지하기 위해 트랜잭션 전후에 특정 속성을 따르게 되는데 이를 ACID 속성이라고 한다. ACID 속성의 장점 1. 데이터 일관성: 트랜잭션 실행 후에도 데이터가 일관되고 정확하게 유지되도록 보장한다. 2. 데이터 무결성: 데이터베이스에 대한 모든 변경 사항이 영구적이고 손실되지 않도록 하여 데이터 무결성을 유지한다. 3. 동시성 제어: 트랜잭션 간의 간섭을 방지하여 동시에 발생하는 여러 트랜잭션을 관리하는 데 도움이 된다. 4. 복구: 오류나 충돌이 발..
ERD(Entity Relation Diagram) ERD는 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며 릴레이션 간의 관계들을 정의한 것이다. DBMS에서 ERD를 사용하는 이유 ERD는 시스템의 요구 사항을 기반으로 작성되며, 이러한 ERD를 기반으로 데이터베이스를 구축하기 때문에 서비스를 구축한다면 가장 먼저 신경 써야 할 부분이다. ERD는 시스템을 구축한 이후 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 한다. ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용하지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 존재한다. 비정형 데이터: 비구조화된 데이터를 말하며 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은..
데이터베이스(Database) 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음을 뜻한다. 데이터베이스의 특징 - 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(Database Management System)라고 하며 해당 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다. - 데이터베이스는 실시간 접근과 동시 공유가 가능하다. - 데이터베이스 위에 DBMS가 있고 그 위에 응용 프로그램이 있으며 이러한 구조를 기반으로 데이터를 주고받는다. 엔티티(Entity) 엔티티는 여러 개의 속성을 지닌 명사를 의미하는 것으로 서비스의 요구 사항에 맞춰 속성이 정해진다. 약한 엔티티와 강한 엔티티 어떤 데이터가..
CPU 스케줄링 알고리즘CPU 스케줄링 알고리즘은 프로그램이 실행될 때 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.CPU가 유후 상태가 될 때마다 운영 체제에서 준비 큐에 있는 프로세스 중 하나를 선택해서 실행하게 되는데 이때 CPU 스케줄러에 의해서 실행된다.CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다. CPU 스케줄링 알고리즘의 목표CPU 활용도를 최대 수준으로 유지한다.모든 프로세스에 CPU를 공정하게 할당한다.단위 시간당 실행을 완료하는 프로세스 수가 최대여야 한다.프로세스가 완료하는 데 걸리는 시간이 최소여야 한다.프로세스가 준비 큐에서 대기하는 시간이 최소여야 한다.프로세스가 응답을 생성하는 시간이 짧아야 한다. CPU..
알고리즘 문제 풀이가 나에게 필요한 이유 알고리즘 문제를 푸는 것은 개발자로 회사에 취직하기 위한 하나의 관문이다. 내가 솔직히 지금 실력으로 취직할 수 있는 곳은 한 군데도 없을 것 같다는 생각이 많이 들었다. 100개의 서류를 넣어서 통과한다고 한들 그다음 관문인 코딩 테스트에서 내가 통과할 수 있을까란 생각이 많이 들었다. 기본적으로 내가 원하는 직장에 들어가기 위해서는 백준을 기준으로 골드 1 이하는 어려움 없이 다 풀어야 된다고 생각하는데 지금의 내 실력으로는 당장 실버 문제를 푸는 것도 버겁기만 하다. 그래도 여기서 좌절하지 않고 문제를 꾸준히 풀어나갈 예정이다. 코딩 테스트를 위한 목적도 분명 있지만 나는 문제를 풀고 해결하는게 그냥 재밌다. 그래서 개발자로 취업하기 위한 하나의 과정, 그리..
동기부여 영상 시청 6월 27일부터 10월 5일까지 100일간의 도전이 끝났다. 내가 삼오백일 도전을 시작하면서 제일 먼저 시도해 본 도전으로 내 인생 처음으로 무언가를 100일간 매일 해봤다. 물론 중간에 한 4일? 정도 못했던 날도 있었지만 그래도 포기하지 않고 꾸준히 해오면서 나름 성취감을 느꼈다. 혹시라도 이 글을 보는 사람들은 똑같은 의문이 들 거라고 생각한다. 왜 동기부여 영상을 100일동안 보지? 그게 의미가 있나? 이러한 의문 혹은 궁금증이 생길 것이다. 물론 나도 100일간 동기부여 영상을 본 것에 어떠한 큰 의미를 두지는 않았다. 그렇지만 도전을 시작할 때는 나에게 필요한 것은 동기부여였고 자신감이 많이 떨어져 있었기 때문에 시작해 봐도 괜찮을 거라고 생각하고 도전하게 되었다. 여러 가..
30일간의 자바 공부하기 9월 18일부터 10월 18일까지 총 31일간 자바 공부를 진행했다. 마지막 이틀 정도는 내가 면접 본 부트캠프를 붙어서 이것저것 많은 일이 있어 신경을 쓰지 못해 공부를 별로 못해서 아쉬웠다. 31일간 내가 자바 공부하면서 느낀 것과 부족했던 점, 성과를 얘기해볼까 한다. 31일간 자바를 공부하면서 발견한 작은 성장 31일간 자바를 공부하면서 내가 사용하는 언어에 관해 조금 더 깊은 지식을 습득할 수 있었다. 가령 변수의 범위, Optional, 스레드 등 정말 기초적인 지식이지만 나는 자바 프로젝트를 하면서도 잘 알지 못하고 사용했었다. 그래서 이번에 공부하며 내가 사용했던 기술을 왜 사용하는지 알게 되었고 어떤 역할과 기능을 하는지 좀 더 깊이 있게 알 수 있었다. 공부를 ..
프로세스(Process)프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰인다.프로그램프로세스어떤 작업을 하기 위해 실행할 수 있는 파일실행되어 작업중인 컴퓨터 프로그램파일이 저장 장치에 있지만 메모리에 올라가 있지 않은 정적인 상태메모리에 적재되고 CPU 자원을 할당받아서 프로그램이 실행되고 있는 상태컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일실행 파일을 실행하여 작업 중인 프로그램 프로세스와 컴파일 과정앞서 설명했던 것과 같이 프로세스는 프로그램을 실행한 것인데, 예를 들어 프로그램은 구글 크롬 프로그램과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 프로세..
메모리(Memory)메모리는 일시적 또는 장기간 데이터를 저장하는 디지털 시스템이다.CPU는 그저 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐이기 때문에 데이터와 명령어를 저장하기 위해서는 메모리가 가장 중요한 부분이다. 메모리 계층메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다.메모리 계층 구조는 컴퓨터에서 사용 가능한 메모리를 최적화하는 데 도움이 되므로 컴퓨터 메모리에서 가장 필요한 것 중에 하나이다.메모리에는 여러 수준이 있으며 각 수준은 크기, 비용 등이 다르다. 계층 위로 갈수록 비용이 높고 속도가 빠르며 아래로 갈수록 용량은 커지지만 속도가 낮은 대신 가격이 저렴해진다.간단히 표로 정리하면 아래와 같다.분류휘발성속도용량CPU 레지스터O가장 빠름가장 적은 용량캐시(..