안녕하세요! JustKode 입니다. 살다 보면, 아니 한국에서 개발자로 살다보면 생각 보다, Java를 해야 할 일이 많습니다. Android, Spring, Hadoop, Spark 등, 여러 곳에서 자바는 사용 됩니다.
대부분의 컴퓨터공학과 학생들은 학교 프로그래밍 기초 시간에, C/C++을 많이 배우게 됩니다. 저 같은 경우에도 1학년 때 C++로 프로그래밍을 시작 했습니다.
C++ 과 Java는 닮은 구석이 많습니다.
사실 이 두 가지가 많은 것들을 함축하고 있습니다. 코드 구조가 유사하다는 것은, 우리가 C++ 에서 배운 개념들을 유사하게 Java에서 이용할 수 있다는 것을 의미 합니다.
그래서, 저는 유사한 부분과, 다른 부분을 비교 및 대조 해 보며, **C++**을 배운 학생들이 쉽게 Java를 배울 수 있도록 글을 써보려고 합니다.
해당 시리즈는, **C++**의 상속, virtual Class 및 function, STL 까지, 다 알고 있다는 가정 하에 진행 합니다. 오늘은 Java를 하기 전에 알아야 할 것들에 대해서 작성 해 보려고 합니다.
Java는 순수하게 객체지향 프로그래밍을 실천하기 위해 만들어진 언어 면서, **C++**의 단점인 종속성 문제를 해결 하기 위해 등장하였습니다. **C++**은 한 번 컴파일 되면 해당 운영체제 혹은 플랫폼에 종속되는 문제를 가지고 있지만, Java는 JVM을 이용하여, Java 실행 환경을 지원 하는 어느 운영체제에서도 실행 될 수 있도록 합니다. 이를 통해, Java는 전 세계에서 가장 많은 사람이 사용 하는 언어로 자리 매김 할 수 있었습니다.
JVM 구조, 출처: https://medium.com/@ahn428/java-jvm-java-virtual-machine-jre-java-runtime-environment-jdk-java-developement-kit-fed91def1d6f
Java가 **C++**에 비한 장단점은 다음과 같습니다.
우리는 JDK 내에 있는 javac를 사용 하여, java 코드를 .class 파일로 컴파일 하고, java를 이용 하여 .class 파일을 실행 합니다.
Test.class 파일이 만들어 진 것은 생략 하였습니다.
파일 명은, public class
이름과 완전히 일치 해야 합니다. 또한, public class
는 파일 내에 하나만 존재 하여야 합니다.
Main.java
public class Main {
...
}
class Sub {
...
}
만약 public class
가 없다면, 아무 클래스의 이름과 일치 하여도 됩니다.
A.java or B.java
class A {
...
}
class B {
...
}
왜 public class
가 존재 하는가? 이는 그저 가독성 때문 입니다. 만약 제가 Pig
라는 클래스를 import
하였는데, Cat
이 나오면 당황스러울 것이기 때문입니다.
Java에서 기본 적으로 제공하는 변수는 다음과 같습니다. 대부분 C++ 에서 사용 하던 파일 타입을 사용 하나, **C++**과 다르게 unsigned
를 적용 할 수 없습니다.
byte
, short
, int
, long
float
, double
char
boolean
public static void main(String args[])
은 public class
내에 존재하여, **C++**에서 int main()
역할을 합니다. 이 함수를 public class
내에 넣어 주면 해당 코드를 실행 합니다. args
에 들어가는 데이터들은 java
명령어로 .class
파일을 실행 할 때 argument
로 들어 가는 값들 입니다.
Main.java
public class Main {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.print(args[i] + ", ");
}
System.out.print('\n');
}
}
$ java Main 123 456 789
123, 456, 789,
new
는 새로운 배열의 혹은 새로운 객체를 heap 영역에 할당 할 때 사용 합니다.
int[] int_array = new int[5];
// int형 배열 참조변수 int_array에
// 새롭게 heap 영역에 할당 된 int_array 배열의 주소를 저장함.
Cat cat;
// 메모리에 참조 변수 cat을 위한 공간이 마련됨.
// 아직 인스턴스가 생성 되지 않음.
cat = new Cat();
// 참조 변수 cat에 새롭게 heap 영역에
// 할당 된 Cat 객체의 주소를 저장함.
다음 시간에는 본격적으로 콘솔 입출력, 배열 복사, os 정보 열람 기능을 담당하는 System 객체에 대해서 알아 보겠습니다.