오늘은 제목 그대로, 저만의 언어로 JAVA를 한 번 잡아보겠습니다.
목차
1. 프로그래밍 언어, 자바
2. 변수
3. 배열
4. 클래스와 객체
5. 객체배열관리
프로그래밍 언어, 자바
프로그래밍 언어를 사용한다는 것은 컴퓨터와 내가 상호작용하기 위한 도구를 쓰는 것과 같습니다.
따라서 효율적이고 적절하게 상호작용 하기 위해서는, 컴퓨터에 대한 이해 및 사용하고자 하는 프로그래밍 언어에 대한 이해가 필수적입니다.
컴퓨터는 기본적으로 2진법의 기계어를 사용하고 있습니다. 이는 0과 1 오직 두 가지로 모든 데이터를 처리한다는 것이죠,
간단하게 트랜지스터에 대한 전기신호 on/off (1/0) 에 따라서 정보를 처리하기 때문에 이를 숫자로 표현하면
ex)1101001, 1101
이러한 방식으로 나타낼 수 있습니다. 1101, 여기서 숫자 각각이 신호를 나타내는 최소 단위 Bit (Binary + digit)를 나타냅니다. 따라서 1101은 4비트의 신호를 말합니다.
Q. 그렇다면 4비트로 표현할 수 있는 정보의 개수는 얼마나 될까요?
A. 비트 하나당 0 or 1의 값을 갖으므로, 4비트는 중복순열 2의 네제곱 즉, 16가지의 정보를 표현할 수 있는 것이죠
그럼 이제 바이트(Byte)에 대해서 알아볼까요?
Byte는 컴퓨터가 데이터를 저장하는 정보의 최소 단위로, 1 Byte = 8 bits로 나타낼 수 있습니다.
그럼 1Byte는 0과 1로 이루어진 8자리의 2진법으로 표현될 수 있겠죠
또한 여기서 1 nibble = 4 bits로 새로운 개념이 등장하는데요,
0부터 15까지 16가지의 신호를 1nibble로 표시하여, Byte를 구성하는
하나의 단위를 사용합니다. 그런데 nibble이라는 개념은
왜 사용하는 걸까요?
그것은 바로...!
Byte간의 경계, 즉 정보의 구분을 용이하게 하기 위해서 입니다.
2진법으로 정보를 저장하는 컴퓨터에서 정보의 값이
110101010101011010101 이라고 했을 때, Byte단위로 정보를 구분하기 쉬우신가요?
그럼 10진법은요?
121212112에서 정보를 읽을 때 12인지, 아니면 1과 2인지 구분이 어렵겠죠
이를 보완하기 위해 우리는 16진수의 개념을 사용합니다
0부터 9까진 숫자를 그대로 쓰되, 10부턴 a(10),b(11),c(12),d(13),e(14),f(!5) 순으로 사용하여
바이트간 구분을 명확히하게 한 것이죠,
A0F1E3128A8CDF
어떠신가요, 1Byte를 생각했을 때 A0,F1,E3,12 16진수를 사용함으로써 Byte의 구분이 더 명확해졌죠?
모든 것에는 이유가 있다
마지막으로 10001001는 2진수는 256가지의 정보를 내포한다고 했죠?
그런데 이는 -127 ~ 127까지, 즉 2의 보수를 활용해서 숫자로 나타내기 때문에
평소에 사용하시는 이진법 계산으로 생각하시면 안되고, 2의 보수 형태로 해석하기 때문에
이를 10진법으로 표현하기 위해서는 두 가지 방법을 따라야합니다.
1. 맨앞에 1이 있다면 -> 음수 처리
2. 비트를 뒤집고 + 1
자바에서 +0,-0 은 다른 정보로 취급합니다
그럼 이제 Java라는 언어에 대해서 좀 더 알아볼게요
자바는 입력받은 언어를 바로 기계어로 변환하지 않고 바이트 코드로 먼저 변환하는 과정을 거칩니다. (Javac)
왜일까요? 바로 OS에 독립적이라는 특징 때문인데요.
자바는 OS에 상관없이 동작 가능한 프로그래밍 언어입니다
이는 먼저 javac를 통해 컴파일 과정을 거친 뒤, 바이트 코드로 변형된 코드를
Java virtual machine (JVM)를 활용하여 각자의 OS에 맞게 변형시켜 주기 때문이죠
따라서 JVM은 OS version 별로 모두 다르게 설치해야합니다
JRE (java runtime environment) 자바 실행 환경
JVM을 포함한 자바의 런타임 환경을 말합니다.
여기엔 클래스 로더, 자바 클래스 라이브러리 파일이 포함되며,
JRE와 컴파일러를 더해 JDK ( java Development kit)라고 부릅니다.
'Java' 카테고리의 다른 글
객체지향의 사실과 오해를 읽고 (1) | 2025.02.12 |
---|---|
VO(Value Object)는 무엇이고 왜 쓰는 걸까? (1) | 2025.01.23 |
자바의 런타임 데이터 영역에 대하여 (2) | 2024.06.15 |
자바의 실행과정과 JIT에 대하여 (0) | 2024.06.12 |
추상클래스와 인터페이스에 대하여 (0) | 2024.06.12 |