본문 바로가기

Programming

(136)
JVM JVM은 Java Virtual Machine(자바 가상 기계)의 약자다. 이름은 기계지만 실제로는 소프트웨어다. 아마 JVM이 실질적인 CPU 역할을 하기 때문에 이런 명칭이 쓰였을 것이라 추정된다. 프로그램은 기본적으로 CPU 위에서 돌아간다. 따라서 C, C++의 경우 컴파일 결과 생성된 코드는 해당 CPU에서 바로 실행할 수 있다. 이런 코드를 네이티브 코드(native code)라 한다. 자바 소스코드(*.java)를 컴파일한 경우 생성되는 클래스 파일(*.class)은 CPU에서 직접 실행할 수 있는 코드가 아니다. 이 클래스 파일은 CPU 위에서 실행할 수 있게 하기 위한 중간 단계라고 할 수 있는 바이트 코드(byte code)로 이루어져 있다. 이 바이트 코드를 실행하기 위한 가상적인 C..
Managed code C언어로 작성한 코드를 컴파일하면 네이티브 코드(native code)가 된다. 네이티브 코드는 managed code로도 불린다. 과거의 프로그래밍은 대부분 네이티브 코드로 진행되었다. 컴파일하면 CPU가 해석할 수 있는 기계어로 번역이 되는 방식인데, 이런 방식에서 프로그래머는 여러 문제를 신경써야 한다. 대표적인 예로 메모리 누수와 이식(porting)이 있다. OS는 하드웨어에 따라 다르므로 다른 OS로 옮길 때(porting이라 함) 번거롭다. 소스는 비슷하더라도 컴파일 결과는 OS에 종속적이기 때문에 번거로울 수 밖에 없다. 그래서 OS에 독립적인 프로그래밍을 위해 만들어진 것이 Java다. Java로 만들어진 프로그램은 어떤 OS에서도 실행할 수 있는데, 이를 ⒜WORA 또는 이식성이 좋다고..
[BAEKJOON] 2747번 12345678910111213141516171819202122import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1 = 1; int n2 = 1; int n3 = n1 + n2; int n = sc.nextInt(); for (int i = 3; i n2 == 1: true=> System.out.println(n/2 + n%2)=> System.out.println(0 + 1)=> System.out.println(1) n = 2=> n2 == 1: true=> System.out.println(n/2 + n%2)=> Sys..
피보나치 수열 피보나치 수열(Fibonacci sequence)은 다음과 같이 정의된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include int seq(int n); int main() { int len; int i; printf("How long?: "); scanf("%d", &len); for (i = 1; i
[BAEKJOON] 15552번 12345678910111213141516171819202122232425import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; public class Problem15552 { public static void main(String[] args) throws NumberFormatException, IOException { run(); } public static void run() throws NumberFormatException, IOException { BufferedReade..
[BAEKJOON] 10828번 12345678910111213141516171819202122232425262728293031323334353637import java.util.Scanner; public class Main { public static void main(String[] args) { run(); } public static void run() { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int[] stack = new int[t]; int top = -1; String command; sc.nextLine(); //입력 버퍼에 남은 개행 처리 for(int i = 0; i
OS의 의의 1. OS의 기능 OS가 없던 초기의 컴퓨터에서 프로그램을 만들려면, 아무 프로그램도 없는 상태에서 프로그래머가 모든 기능을 처리하는 프로그램을 처음부터 끝까지 작성해야 했다. 기계어로 프로그램을 작성한 후 스위치라는 것을 사용해 완성된 코드를 입력해야 했는데, 이는 상당히 까다로운 작업이었다. 그래서 프로그램을 적재(load)하고 실행하는 기능만 갖춘 모니터 프로그램이라는 것이 개발되었다. 미리 모니터 프로그램을 실행시켜 둔 후, 여러가지 프로그램을 메모리에 적재해 실행할 수 있게 되어, 이제 프로그래머는 모든 기능을 처리할 필요는 없어졌다. 그런데 사실 많은 프로그램이 갖는 공통점이 있다. 키보드로부터 데이터를 입력받고, 모니터로 데이터를 출력하는 것이 대표적인 예다. 최종적으로 완성되는 프로그램을 ..
IO 입출력 Java는 java.io 패키지에서 File 클래스와 여러가지 스트림 클래스를 제공한다. 스트림 클래스는 크게 다음과 같이 두 가지로 나뉜다. ① 바이트 기반 스트림 - 그림, 문자를 비롯한 모든 종류의 데이터 입출력 가능 - 1byte 단위로 입출력 ② 문자 기반 스트림 - 문자 데이터만 입출력 가능 - 2byte 단위로 입출력(Java는 문자를 유니코드로 처리한다.) InputStream 클래스와 OutputStream 클래스는 바이트 기반 스트림의 최상위 클래스로 두 클래스 모두 추상 클래스다. InputStream 클래스는 FileInputStream, BufferedInputStream, DataInputStream 클래스 등을 하위 클래스로 갖고, OutputStream 클래스는 FileOut..