C++에서 배우는 자바-기초 문법(1)
서론
자바의 정석을 읽기 시작했다. 초반부라 그런지 대부분이 아는 내용이라 술술 넘어가는데 전체적으로 C를 기반으로 C#을 좀 섞은듯한 느낌이 들었다.
자주 사용하던 C++과는 문법이라던지 형식이라던지 다른 점이 좀 있어 C++과의 차이점을 중심으로 기술하면서 배워나갈 예정이다. 일단 현재 읽은 부분까지 C++과의 차이점을 포스팅해보겠다.
차이점 정리
코드의 형식
아마 지금까지 본 것들 중 C++과의 가장 큰 차이점이 아닌가 싶다. C++은 기본적으로 클래스를 사용할 수 있었지만 어디까지나 부차적으로 자신이 객체지향 프로그래밍을 원할 때 사용할 수 있었다.
하지만 자바에서 클래스는 필수적이다. 모든 함수와 변수 등의 코드는 클래스 내부에 작성되어야 한다.
C++에서는
int main(void) {
//something...
}
가 코드 작성의 기본이었다. 프로그램의 실행은 메인 함수를 가동시키는 것으로 시작하고 메인함수가 끝나면 프로그램도 끝났다.
하지만 자바는 다르다.
class cl {
public static void main(String[] args) {
//something...
}
}
메인 함수의 생김새가 일단 다르고 자바에선 모든 함수가 클래스 내에 있어야 하므로 메인 함수 또한 클래스 내부에 위치하게 된다.
하지만 역할은 똑같다. 프로그램은 메인함수의 시작과 끝과 동일하다.
그리고 자바의 소스파일에는 public 클래스가 단 하나만 존재할 수 있는데, 파일 이름을 public 클래스의 이름과 동일하게 맞춰주어야 한다.
어디선가 본 방식이다 싶었는데 Unity에서 C#을 사용할 때 자주 보았던 방식이라 익숙했다.
그리고 C#과 같이 예약어의 대소문자를 철저히 따지는 것 같다. 방금 자바를 설치하고 vscode에 환경을 조성하여 포스팅의 코드 몇 가지를 시험해보았는데 대문자로 시작하지 않으면 자동완성조차 제대로 작동하지 않는 것을 확인했다.
C++을 사용할 때보다 더 주의해서 작성해야 할 것 같다.
상수
C++에선 어떤 상수를 선언할 때 다음과 같이 작성했다.
const int a=10;
하지만 자바에서는 const 대신 final을 사용한다. 즉
class cl {
public static void main(String[] args) {
final int a=10;
}
}
와 같이 작성해야 한다.
입출력
C++에서는 cout으로 대부분의 출력을 해결했다. 하지만 자바에서는 printf, println을 사용하는데 System.out.printf()와 같이 사용해야 한다.
예를 들어
cout << "자바의 정석";
과 같이 C++에서 사용되던 것을
class cl {
public static void main(String[] args) {
System.out.println("자바의 정석");
}
}
과 같이 사용해주어야 같은 결과를 얻을 수 있다. 자바는 왠지모르게 코드가 다 길쭉길쭉한 느낌이라 cout 4글자로 끝나던 C++이 조금 그리워진다.
입력에서도 많은 차이가 있다. C++에서는 cin 하나로 다 해결해왔다. 하지만 자바에서는 다른데 일단 java.util.* 라이브러리를 import 한 후 scanner 객체를 생성하고 scanner 객체의 서브함수로 입력을 받아야 한다. 대단히 복잡해보인다.
예를 들어
int a;
cin >> a;
와 같이 사용했었지만 자바에서는
import java.util.*;
class cl {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
}
}
와 같이 작성해야 같은 결과를 얻을 수 있다. 여러 OS에서 동일하게 동작하는 장점이 있다지만 역시 코드가 좀 길고 복잡해보인다. 아직까지는 C++보다 장점을 잘 모르겠지만 공부하다보면 보이지 않을까?
형변환
C++에선 주로
double d=10.123;
int a=static_cast<int>(d);
와 같이 static_cast를 사용하여 명시적 형변환을 했다. 하지만 자바에선 C에서 하던대로
class cl {
public static void main(String[] args) {
double d=10.123;
int a=(int) d;
}
}
와 같이 괄호를 사용하여 명시적 형변환을 해준다.
일단 본 부분까지 차이점들을 정리해보았다. 책을 더 읽고나서 차이점들을 더 정리하여 이후 포스팅하도록 하겠다.