일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알프레드 에이호
- 머신러닝
- 파일 검색
- 휴먼명조
- 나만의 독서법
- 매트로폴리탄 미술관
- 누구를 위한 교육과정인가?
- 욱
- 베스트 극장
- 2022 개정 교육과정
- Code Blast
- 안드로이드
- Visual Studio Code
- 선각자
- 제프리 울만
- 앱
- 중학교 교육과정
- 수학적 귀납법
- 박사 논문
- 변곡점
- code.org
- 블록 코딩
- 2021년 튜링상
- MontyHall
- 패트릭 브링리
- 인공지능
- 4차 산업혁명
- 동영상 플레이어
- 단편 드라마
- 코드 폭발 효과
- Today
- Total
코딩하는 공무원
C언어 유경험자가 Java 언어를 배울 때 주의할 점들 본문
1. ==============================================
byte 형 변수에 int 형 상수를 대입할 수 있는가? 있다!
byte a = 100; // 문제 없음
float 형 변수에 double 형 상수를 대입할 수 있는가? 없다!
float b = 10.5; // 컴파일 에러
도대체 왜 이럴까요? 자~ 지금부터 설명해 보겠습니다.
100은 기본적으로 int형입니다. 총 32비트라는 이야기지요...
byte a에 상수값을 대입할 때, 상수값의 범위가 byte 범위 내에 있는지 조사합니다.
범위 내에 있다고 판단되면, 최하위 비트로부터 8비트를 가져옵니다.
즉, 정수형은 비트의 크기만 차이가 날 뿐 숫자를 표현하는 방법은 모두 같기 때문에 이러한 방식이 가능합니다.
그러나 부동소수점형식은 다릅니다. float(단정도)와 double(배정도)는 전체 비트 크기의 차이점 뿐만 아니라, 지수부와 가수부의 비트수, 그리고 각 표현 방식이 다르기 때문에 정수형처럼 단순하고 일관된 방식으로 값을 가져올 수가 없지요. 그래서 float b = 10.5;는 컴파일 에러가 나는 것입니다.
다음과 같이 변경해야 컴파일 에러가 나질 않습니다.
float b = 10.5f;
2. ==============================================
byte a = 10;
byte b = 20;
byte c = a + b;
왜 이 코드는 컴파일 에러(possible loss of precision)가 발생할까요?
Java 언어는 이항 산술 연산의 피연산자 중 어느 하나가 변수일 경우, ing형보다 크기가 작은 자료형을 int형으로 형변환 후에 연산이 이루어집니다. a + b 연산시, a와 b를 int 형으로 형변환하고, 32비트 값을 c에 대입할 준비를 합니다. 그런데, c가 byte이므로 컴파일 에러가 발생하는 것이지요.. 두 피연산자가 모두 상수일 경우에는 1번의 경우가 동일하게 적용되므로 문제가 없습니다. 위의 문제를 해결하려면 다음과 같이 하면 됩니다.
byte c = (byte)(a + b);
그러나 a + b 의 결과가 byte 형 범위를 초과하는 경우 강제적 형변환에 의해서 값 손실이 발생되겠네요..
3. ==============================================
Java 에서 배열은 객체입니다. C언어에서는 배열을 선언해야 하지만, Java에서는 배열 객체를 생성해야 하지요.
C 언어
int a[5]; // 선언
int a[5]={1,2,3,4,5}; // 선언과 초기화
int a[]={1,2,3,4,5}; // 선언과 초기화
Java 언어
int a[];
a = new int[5]; // 생성
int[] a;
a = new int[5]; // 생성
int a[] = new int[5]; // 생성
int[] a = new int[5]; // 생성
int[] a = {1,2,3,4,5}; // 생성과 초기화
int a[] = {1,2,3,4,5}; // 생성과 초기화
int[] a = new int[](1,2,3,4,5}; // 생성과 초기화
단, 주의할 점이 있습니다. Java 언어에서 ‘생성과 초기화’시 배열의 크기를 입력하면 안됩니다. 즉, 아래의 코드는 모두 컴파일 에러가 발생합니다.
int[5] a = {1,2,3,4,5};
int a[5] = {1,2,3,4,5};
int[] a = new int[5](1,2,3,4,5};
4. ==============================================
클래스를 선언하면서 메서드 외부에서 다른 메서드를 곧바로 실행할 수는 없습니다. 왜냐하면, 클래스는 객체를 생성하기 위한 틀이고, 이 틀로부터 객체를 생성하여 해당 객체의 메서드를 실행할 수 있지요...
5. ==============================================
인스턴스 메서드에서 자신의 객체를 생성하여 다른 인스턴스 메서드를 호출할 수는 있습니다. 그러나 일반적인 상황이 아니며, 객체 지향답지 못합니다. 안 쓰는 것이 좋습니다.
'컴퓨터과학' 카테고리의 다른 글
Python 2.x 에서 한글 경로에 문제가 발생하는 경우 (0) | 2012.03.03 |
---|---|
Python 파이썬 추천 IDE (0) | 2012.02.03 |
안드로이드 에뮬레이터에서 한글 키보드 설치 방법 (3) | 2011.06.03 |
AcroEdit에서 C++와 Java 언어를 컴파일하기 위한 사용자 도구 정의 파일 (0) | 2010.11.21 |
AcroEdit 에서 Java 컴파일하고 실행하기 (0) | 2010.11.21 |