1. Overview about the similarities between C++ and Java
C++ 과 Java 모두 아래의 특징을 공통적으로 가진다.
- 단순 데이터타입 : int, double, char
- 제어 구조: if-else, switch, while, for
- 수학적 표현
- 문자열 타입
- 배열
- 클래스
- 메인 함수
즉, 두 프로그래밍 언어는 거의 비슷하다.
2. Data types
Java | C++ |
byte (8 bits) | char |
short (16 bits) | int, short |
int (32 bits) | long, int |
long (63 bits) | long |
boolean (true or false) | bool |
char (16 bits, unicode) | char |
float (32 bits) | float |
double (64 bits) | double |
void | void |
String | string |
- 두 프로그래밍 언어는 매우 비슷하다.
- Java
- 모든 데이터 타입은 특정 크기를 가지고 있다. ex) byte - 8 bits
- 반드시 코딩을 할 때 데이터 타입의 크기를 결정해 두어야 한다. (컴파일 전)
- string 이 기본 데이터 타입이기 때문에 라이브러리가 따로 필요 없다.
- C++
- 데이터 타입 크기를 정해 놓지 않았다.
- 데이터 타입의 크기를 컴파일러가 결정하기 때문에 운영체제마다 다르게 컴파일 된다.
- string 데이터 타입을 사용하려면 라이브러리로 가져와야 한다.
3. Programming style
C++
- 헤더 파일과 같은 인터페이스가 필요하다.
- .cpp 와 같은 implementation 파일이 필요하다.
- .dll 과 같은 application 파일이 필요하다.
Java
- 모든 필요한 파일들이 하나의 클래스 파일에 정의된다. .java
- 코드가 분리되어 있지 않다.
4. Common difference between C++ and Java
Java | C++ |
다중 상속 X | |
템플릿 함수 사용 X | |
포인터 X | 포인터 O |
operator overloading X | operator overloading O |
destrcutor X -> automaic garbage collector가 대신함 |
destructor O -> 사용되지 않는 변수나 자원을 delete (delete operator) |
함수를 method 라고 부름 -> 모든 메소드가 클래스의 멤버여야 함 |
함수를 function 이라고 부름 |
표준 콘솔 input X | console I/O |
call-by-refernce X | call-by-refernce O |
variables
- C++과 Java의 변수 선언 방식은 같다.
- C++은 포인터 선언이 가능하다.
- C++은 다양한 방식으로 변수 선언이 가능한 반면, 자바는 위 예시에 나온 한 가지 방법 뿐이다.
- 또한 C++은 delete로 메모리 release를 위해 변수를 제거 하는 일을 하지만 Java에서는 garbage collection이 자동으로 수행되기 때문에 delete가 따로 없다.
constants
- C++은 #define 또는 const 로 상수를 선언할 수 있다.
- Java : final
- compile time 상수 (static 추가)
- run time 상수 : 런타임에 상수 생성
strings
- 자바의 문자열 선언은 반드시 대문자 'S'tring 이다.
- C++은 문자열을 사용하려면 #include <string> 을 먼저 선언해주어야 한다.
Example
public class examples {
public static void main(String[] args){
int var1;
var1 = 10;
// or
int var2 = 2;
double var3 = 2.5;
vloat var4 = 2.4f;
long var5 = 2l;
boolena bool = true;
String str1 = "Hello, welcome to ";
String str2 = "Java programming";
String str3 = str1 + str2;
System.out.println(var2 + " " + var3 +" "+ var4); // 2 2.5 2.4
System.out.println(str3); // Hello, welcome to Java programming
}
}
arrays
- Java : data_type array_name[] = new data_type[array_size]; = 힙 방식 (C++과 같음)
public class examples {
public static void main(String[] args){
int [] array1 = new int [10];
int array2[] = new int [10];
// 두 방식 모두 OK
System.out.println(array1); // [array 메모리 주소...
System.out.println(array1[0]); // 0 (배열은 0으로 초기화되어 있기 때문에 0 출력
array1[1] = 12345;
System.out.println(array1[1]); // 12345 출력
System.out.println(array1[15]); // ArrayIndexOutOfArray 에러 출력
}
}
multidimensional arrays
- Java는 C++와 다르게 jagged (not rectangle) array를 지원한다.
public class examples {
public static void main(String[] args){
// new int [row][column]
int [][] arrayM1 = new int[10][5];
int arrayM2 [][] = new int[10][5];
int [][] arrayM3 = {{1,2,3,4},{5,6,7,8}}; // = new int[2][4]
System.out.println(arrayM3[0][2]); // 3
}
}
Input/Outpit console
- Java class sample
- PetRecord 클래스
- private : 해당 클래스 외부에서 private 변수에 접근 불가
- constructor는 클래스 이름과 동일하게 설정 -> 두 개의 input을 파라미터고 갖는 함수
public class examples {
static void RunMethod(int a, int b){
// static : 오직 메인 함수에서 실행 가능하게 하도록
System.out.println("Executed RunMethod...");
System.out.println("Finished RunMethod...");
}
void NotStatic(int a, int b){
System.out.println("not static...");
}
public static void main(String[] args){
int var1 = 10;
RunMethod(var1, 20); // RunMethod가 static 함수가 아니면 main 함수에서 실행 불가
examples object = new examples(); // 클래스 오브젝트 인스턴스 생성
object.NotStatic(var1, 20); // 클래스 인스턴스의 함수로는 static이 아닌 함수도 실행 가능
}
}
- Name: Loli \n Age: 2 years
- PetRecord("Loli",2); : constructor 함수
- x.writeOutput() : 함수 실행 코드
5. Common differences in Syntax and Semantics
main method
Conditions statement
- C++에서는 0 또는 1, 숫자로 반환되는 표현식을 IF 조건문으로 사용할 수 있다.
- 자바는 boolean 으로만 반환되는 것만 조건문으로 사용할 수 있다.
Jump Statements
- 자바에서는 break를 사용해서 밖에 있는 레이블로 이동할 수 있다.
- C++에서도 break를 사용할 수 있지만 goto도 사용할 수 있다.
passing arguments
- pass by reference
- 배열, 객체, 변수 등을 참조로 전달 가능하다.
- 참조된 값을 변경하는 것을 원본 데이터에도 영향을 준다.
- pass by value variables
- 원본 데이터를 복제해서 사용하는 참조 데이터는 독립적이다.
- 따라서 참조한 데이터를 업데이트해도 원본 데이터는 그대로이다.
- C++은 둘다 지원한다.
- Java는 pass by value만 지원한다.
method overloading
- 함수 이름은 같으나 서로 다른 데이터타입을 가진 데이터를 인풋파라미터로 전달하는 것
- C++와 Java 모두 메소드 오버로딩을 지원한다. 서로 다른 파라미터를 전달하면서 메소드를 여러번 호출하는 것이 가능하다.
- C++은 디폴트 값을 파라미터를 전달할 수 있지만 자바는 안된다. (int a = 3 전달 불가)
Variable parameter lists
- 자바에서는 int ... args를 전달하면 개수 제한 없이 인풋 파라미터를 전달할 수 있다.
- 이 값은 for loop으로 접근할 수 있다.
- C++에서는 아주 복잡하기 때문에 이 수업에서는 다루지 않는다.
Functions
- 자바는 프로토타입이 없고, 클래스 외부에서 함수를 선언할 수 없다.
Libaries
References
- 성균관대학교 소프트웨어학과 2021-1 <자바 프로그래밍 실습> 타메르 교수님
- 2021.03.01
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java programming 자바 프로그래밍 실습 : 시험 시스템 (0) | 2021.03.11 |
---|---|
Java programming 자바 프로그래밍 실습 : 급여 계산기 (0) | 2021.03.11 |
Java programming 자바 프로그래밍 실습 : 원기둥 부피 구하기 (0) | 2021.03.11 |
Week3) Java Programming Lab : Class and Instance (0) | 2021.03.09 |
Week 1) Java Programming Lab: Course Introduction (0) | 2021.02.23 |