'Language/C, C++'에 해당되는 글 1건

  1. [scrap] C와 C++에서 제거된 특성 2008.04.28

⊙ Typedefs, Defines, and the Preprocessor

자바언어로 쓰여진 원시코드(Source Code)는 간결하다. 전처리기도, #define과 그와 관계된 특성도, typedef도, 그러한 특성이 없는, 헤더파일도 더 이상 자바에는 없다. 헤더파일을 대신하여, 자바언어는 인터페이스(Interface)가 다른 클래스와 메쏘드 정의를 제공한다.

C와 C++에서 중요한 문제는 다른 프로그래머의 코드를 이해하기 위한 상당량의 목차(Context)였다 - 프로그램을 분석하기 전에 관계된 모든 헤더파일, #define, typedef를 읽어야 했다. 이렇게 되자, 이런 스타일의 프로그램밍은 더 좋은 프로그램밍 실제의 목적을 창조하거나 물리쳐 다른 사람이 이해할 수 없 는 새로운 프로그램밍 언어를 각기 프로그래머들로 하여금 고안하게 하는 결과를 낳았다.

#define은 상수를 이용하면 된다. typedef는 클래스를 이용하면 된다 - 무엇보다도, 클래스는 효과적으로 새로운 종류를 선언한다. 자바언어 컴파일러가 클래스 정의를 모든 종류의 정보를 지니는 바이너리폼(Binary Form)에서 링크 시에 바꾸어 컴파일하기 때문에 헤더화일이 필요 없다.

이런 낡은 습관을 제거하여, 자바언어는 획기적인 목차에 자유롭게(Context Free) 되었다. 프로그래머는 코드를 읽고 이해할 수 있으며, 더욱 중요하게 더욱 빠르고 쉽게 코드를 바꾸고 재활용할 수 있다.


⊙ 구조체와 공용체(Structures and Unions)

자바언어는 복잡한 데이터인 구조체와 공용체가 없다. 클래스를 사용할 때 구조체와 공용체가 필요 없다 - 클래스의 인스탄스 변수를 사용하면 된다. 다음의 코드예제는 좌표와 사각형 클래스를 선언하는 것이다. 구현된 내용을 얼마나 감추는 가에 따라 private 또는 public으로 인스탄스 변수를 만들 수 있다.

class Point extends Object {
float x;
float y;
인스탄스 변수에 접근하는 함수를 만들고
}

class Rectangle extends Object {
Point lowerLeft ;
Point upperRight ;
인스탄스 변수에 접근하는 함수를 만들고
}


⊙ 함수(Functions)

자바언어에는 함수가 없다. 객체지향 프로그램밍은 함수적이고 프로시져 적인(Procedural) 스타일을 빼었었다. 두 개의 스타일을 혼합하여 객체지향 언어의 순수성을 혼동시키고 희박하게 만들뿐이다. 함수로 할 수 있는 것이면, 클래스와 클래스의 메쏘드를 정의하여 더 잘 할 수 있다. 함수를 제거하여, 자바언어는 프로그래머로써 일을 광범위하게 간결화했다 - 클래스와 메쏘드로만 일하면 된다.


⊙ 다중 상속(Multiple Inheritance)과 인터페이스(Interface)

자바언어는 다중상속과 그로 인한 모든 문제를 제거했다. 다중상속의 바람직한 특성은 개념적으로 Objective C 규약과 유사한 인터페이스를 통해 제공된다.

인터페이스는 객체의 정의가 아니다. 하나 이상의 객체가 구현된 메쏘드 집합의 정의라 할 수 있다. 중요한 인터페이스의 관심은 메쏘드만을 선언한다는 것이다 - 일반적으로, 상수인 final변수를 제외하고 어떤 인스탄스 변수도 인터페이스 안에 선언될 수 없다.


⊙ Goto 문장이 드디어 사라지다

자바언어에는 goto가 없다. (goto는 여전히 예약어지만, 아무 일도 하지 않는다) 연구는 goto가 있기 때문에 간단하게 사용하는 것보다는 더 더욱 자주 잘못 쓰여진고 있음을 설명한다. goto의 제거는 언어의 간결함으로 된다 - 예로써 for문장의 중간으로 goto하는 것 같은 규칙은 없다. 위에서 언급했듯이, 다중단계 break와 continue는 goto문의 필요를 제거했다.


⊙ 연산자 중복(Operator Overloading)

자바에는 C++값은 연산자 중복이 없다.


⊙ 자동적인 강제대입(Automatic Coercions)

자바언어는 C와 C++과 같은 강제대입을 금지한다. 한 데이터 요소를 정확성에서 손실을 보는 다른 종류의 데이터로 강제 대입하려면, 명백히 캐스트(Cast)를 사용해야 한다. 다음의 코드를 보자:

int myInt ;
float myFloat = 3.141592 ;
myInt = myFloat ;

myFloat에서 myInt로 대입은 정확성의 손실이 일어날 수 있다는 컴파일러 경고를 발생한다. 다음처럼 올바르게 다시 써야 한다:

int myInt ;
float myFloat = 3.141592 ;
myInt = (int) myFloat ;


⊙ 포인터(Pointers)

대부분의 연구는 포인터가 프로그래머로 하여금 원시코드에 버그를 만들게 하는 주요한 특성임에 동의한다. 구조체가 없어지고, 배열과 문자열이 객체로 주어지면, 이런 구조에서 포인터의 필요성은 사라진다. 따라서 자바언어에는 포인터가 없다. C에서 배열과 구조체, 포인터를 필요로 하는 어떤 작업도 자 바언어에서 객체와 객체의 배열을 선언함으로써 쉽고 신뢰할 수 있게 수행된다.
 

,