전공공부 72

[JAVA] Static? 그거 왜 붙이는건데?

Static. 자바를 이용하여 개발을 하다 보면 참 많이 마주치는 키워드입니다. 당장 main 함수를 선언할 때만 보더라도 public static void main(String[] args){ ... } 요렇게 static이 떡하니 붙어있죠. 그렇다면 static이 왜 붙어있는지, 도대체 무엇인지, 어떻게 쓰이는 것인지 알아보도록 하겠습니다. Static이란? Static은 '정적인, 고정된'이라는 뜻을 가지고 있습니다. 이러한 이름을 가지는 이유는 바로 static이 앞에 붙는 변수나 메서드는 어떤 객체에 소속되는 것이 아닌, 클래스에 고정되어 있는 변수나 메서드이기 때문입니다. Static의 특징을 먼저 살펴보겠습니다. 1. 메모리에 고정적으로 할당된다. 2. 객체 생성 없이 사용할 수 있다. 3...

[JAVA] JVM, JRE, JDK의 차이점이 뭘까?

JAVA를 사용해 개발을 진행하다 보면 JDK, JRE, JVM과 같은 단어들을 쉽게 접할 수 있습니다. 이 셋은 자바 프로그램의 개발과 실행을 위해 필요한 컴포넌트로, 오늘은 이 용어들의 정의에 대해 알아보도록 하겠습니다. 1. JVM (Java Virtual Machine) 이름 그대로 자바 코드를 실행하기 위한 가상 머신이라고 생각하면 편합니다. 기능을 간단하게 언급하자면, JVM은 아래의 역할들을 수행합니다. 1. 자바 코드로부터 컴파일되어 생성된 자바 바이트 코드를 실행합니다. JVM 덕분에 어떤 운영체제를 사용하든지 상관없이 자바 코드를 실행시킬 수 있습니다. 2. Garbage Collection을 통한 메모리 관리를 수행합니다. JVM에 대해서는 아래의 글에 더 자세히 작성되어 있습니다. ..

[알고리즘] 코사라주 알고리즘

코라사주 알고리즘은 SCC(Strongly Connected Component) 문제를 해결하기 위한 알고리즘입니다. SCC란 강한 연결 관계라고 번역될 수 있습니다. 1. 강한 연결 관계? SCC는 그래프에서 노드 간의 연결 관계가 주어질 때, 정점들의 최대 부분 집합으로, 부분 집합에 들어있는 서로 다른 노드 u와 노드 v에 대하여, u에서 v로 가는 경로와 v에서 u로 가는 경로가 모두 존재하는 경우를 뜻합니다. 위의 그래프에서 1, 2, 3번 노드는 각각 서로의 노드로 갈 수 있는 노드가 모두 존재합니다. 예를 들어, 1번 노드에서 3번 노드로 가는 경로가 존재하고, 3번 노드에서 1번 노드로 가는 경로도 존재하죠. 하지만 4번과 5번의 경우, 1, 2, 3번 노드로부터 갈 수는 있으나 4 또는 ..

[JAVA] 자바 가상 머신, JVM에 대해 알아보자!

JVM은 Java Virtual Machine의 약자로 자바 프로그램을 OS 환경과 상관없이 구동될 수 있도록 해주는 가상 머신입니다. 1. JVM의 역할 1. OS에 구애받지 않는 실행 사용자가 작성한 자바 코드는 자바 컴파일러에 의해 자바 바이트 코드로 컴파일되고, JVM은 이 자바 바이트 코드를 사용자의 컴퓨터가 어떤 OS를 사용하든 상관없이 돌아가게끔 만들어줍니다. 즉, 원래 프로그램은 Windows에서 개발되었다면 Mac이나 Linux에서는 구동할 수 없습니다. 하지만 자바는 JVM만 실행 환경에 맞추어 준비해 놓는다면 어떤 OS를 사용하든지 상관없이 구동할 수 있다는 뜻입니다. Windows에서 개발되었더라도 Mac에 맞추어 JVM을 준비만 해 둔다면, 충분히 Mac에서도 실행이 가능합니다. ..

[JAVA] JAVA는 컴파일 언어일까, 인터프리터 언어일까?

앞의 글에서 우리가 코딩 시에 사용하는 언어들은 컴파일 언어와 인터프리터 언어로 구분할 수 있다는 사실을 알게 되었다. 다시 기술하자면, C, C++, Go 등의 언어는 컴파일 언어이고, Python, R, JavaScript와 같은 언어들은 인터프리터 언어이다. 앞의 글은 아래의 링크에서 확인할 수 있다. https://jooona.tistory.com/156 [프로그래밍 언어] 컴파일 언어 vs 인터프리터 언어 우리는 고급 언어를 이용해 프로그램을 짜곤 한다. 여기서 고급 언어란 우리가 사용하는 Java, C, Python 등의 언어를 뜻한다. 이 고급 언어는 크게 컴파일 언어와 인터프리터 언어로 구분할 수 있다 jooona.tistory.com 그렇다면, Java는 왜 예시에 포함되지 않는 것일까?..

[프로그래밍 언어] 컴파일 언어 vs 인터프리터 언어

우리는 고급 언어를 이용해 프로그램을 짜곤 한다. 여기서 고급 언어란 우리가 사용하는 Java, C, Python 등의 언어를 뜻한다. 이 고급 언어는 크게 컴파일 언어와 인터프리터 언어로 구분할 수 있다. 오늘은 둘 간의 차이점을 알아보고자 한다. 1. 컴파일 언어 컴파일 언어는 내가 작성한 소스 코드 전체를 컴퓨터가 알아먹을 수 있는 기계어로 번역한 뒤, 이 번역된 코드를 한번에 실행하는 두 단계를 거쳐 진행된다. 즉 번역과 실행이 완전히 따로 이루어진다는 뜻이다. 번역은 컴파일러를 통해 수행되고, 대표적인 예시로는 C, C++, Go 등이 있다. * 특징 * 1. 컴파일은 오래 걸릴 수 있다! --- 힘겹게 만든 코드를 5시간에 거쳐 컴파일을 했다고 가정해보자! 그런데 변수 이름에 오타가 나서 에러..

전공공부/기타 2021.12.27

[데이터베이스] 데이터베이스 요점 훑어보기

관계형 데이터베이스 관계형 데이터베이스: 데이터가 테이블에 저장되며, 각 테이블은 행과 열 (Tuple & Attribute)로 구성. 이러한 일련의 테이블을 정의한 것을 스키마(Schema)라고 부른다. 키(Key) 테이블에서 특정 행을 유일하게 식별할 수 있게 하는 특정 열 또는 여러 열의 모음. 보통 키 중 하나를 프라이머리 키(Primary Key)로 지정. --> 테이블 각 행에는 프라이머리 키 값이 반드시 있어야 하고, 유일해야 한다. 프라이머리 키 예시) 학생 테이블의 학번. 이름은 중복된 경우가 있을 수 있어 사용 불가. 외부 키를 이용하여 다른 테이블과 링크시키는 것이 가능. 모든 외부 키 값이 참조하는 테이블의 값으로 존재한다면, 그 데이터베이스는 참조 무결성 조건을 만족. SQL SQ..

[알고리즘] 백트래킹

1. 백트래킹(Backtracking) 가장 대표적으로 알고 있는 완전 탐색 알고리즘으로는 DFS를 꼽을 수 있습니다. 하지만 DFS는 정말 완전히 모든 경로를 탐색하므로, 때때로 비효율적일 수 있습니다. 여기서 백트래킹이라는 개념이 등장합니다. 바로 가능성이 있는 부분만 탐색한다는 것입니다. 즉, 어떤 노드를 탐색할 때, 목표로 가는 가능성이 없는 노드라면, 과감하게 배제하고 되돌아갑니다. 이를 가지치기(Pruning)이라고 합니다. 이해를 돕기 위해 예시를 이용해 설명을 더 해보도록 하겠습니다. 백트래킹을 설명할 때 가장 많이 사용하는 예시는 바로 N-Queen입니다. 2. N-Queen N-Queen 문제는 다음과 같이 설명할 수 있습니다. "크기가 N*N인 체스판 위에 퀸 N개를 서로 공격할 수 ..

[소프트웨어 설계] 모듈의 결합도와 응집도

1. 모듈 (Module) 모듈이란 모듈화를 통해 분리된 시스템의 각 기능을 뜻합니다. 모듈화는 시스템을 모듈 단위로 나누는 것을 뜻하며, 이를 통해 시스템의 수정 및 재사용, 그리고 유지, 관리가 용이해지고, 소프트웨어의 성능을 향상할 수도 있습니다. 이 모듈은 단독으로 컴파일이 가능하고, 또 재사용이 가능합니다. 이 모듈들이 시스템 안에서 얼마나 독립적으로 기능을 하는지를 모듈의 기능적 독립성이라고 합니다. 즉 모듈이 하나의 기능만을 수행하고, 다른 모듈과의 과도한 상호작용을 줄이는 것이 기능적 독립성을 높일 수 있는 방법이며, 기능적 독립성이 높을수록 모듈화의 장점들을 더 부각할 수 있습니다. 시스템이 독립성이 높은 모듈들로 구성이 되어야 모듈을 수정하더라도 다른 모듈들에 영향을 최대한 덜 미칠 수..

[알고리즘] 다익스트라 알고리즘

다익스트라 알고리즘(Dijkstra Algorithms)은 그래프에서 여러 개의 노드가 있을 때, 특정 노드에서 다른 노드로 가는 최단 경로를 구해주는 알고리즘으로, 각각의 노드들 간의 가중치 (비용) 값이 음수가 아닐 때만 제대로 동작합니다. 다익스트라 알고리즘은 기본적으로 매번 가장 비용이 낮은 간선을 선택하기 때문에 그리디 알고리즘을 따른다고 볼 수 있습니다. 다익스트라 알고리즘은 기본적으로 다음과 같은 단계를 거칩니다. 1. 출발 노드를 설정한다. 2. distance 배열을 초기화한다. 3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택한다. 4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다. 5. 3번과 4번 과정을 반복한다. 위에서도 알 수..