본문 바로가기

프로그래밍 언어/Java

Week2) Java Programming Lab: Java vs. C++

 

Java-Lecture2.pdf
0.44MB

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