반응형
1. 변수
- 이름 규칙
- 대소문자가 구분되며 길이에 제한이 없다. (True와 true는 다른 것)
- 예약어(키워드)를 사용해서는 안 된다. (true는 예약어라서 사용이 불가능하지만 True는 가능하다.)
- 숫자로 시작할 수 없다.
- 특수문자는 '_'와 '$'만 허용한다. ($harp는 가능, S#arp는 불가능)
- 필수는 아니지만 권장하는 규칙
- 클래스 이름의 첫 글자는 항상 대문자로 한다. (변수와 메서드의 이름의 첫글자는 항상 소문자로 한다.)
- 여러 단어로 이루어진 이름은 단어의 첫글자를 대문자로 한다. (lastIndexOf, StringBuffer)
- 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 _로 구분한다. (PI, MAX_NUMBER)
- 변수의 타입
- 모든 변수는 타입을 갖는다. 타입은 크게 기본형과 참조형으로 나눌 수 있다.
- 기본형 변수는 실제 값을 저장한다. (boolean, char, byte, int, short, long, float, double)
- 참조형 변수는 주소 값을 저장한다. (위 8가지를 제외한 나머지 타입)
※ 자바는 C언어랑 달리 참조형 수 간의 연산을 할 수 없기 때문에 실제 연산에 사용되는 것은 모두 기본형 변수다.
1 byte | 2 byte | 4 byte | 8 byte | |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
※ float pi = 3.14 는 에러가 뜬다. JAVA에서 기본 실수형은 double이라 3.14는 double 형이다. float에 double을 대입할 수 없다. 따라서 float pi=3.14f 라고 해줘야 한다.
- 형변환 (casting)
- 형변환이란, 변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것이다.
- 기본형과 참조형 모두 형변환이 가능하다.
- 기본형과 참조형 사이에는 형변환이 성립되지 않는다. 기본형은 기본형 끼리만, 참조형은 참조형 끼리만.
- boolean형을 제와한 나머지 7개 기본형은 서로 형변환이 가능하다.
- 형변환을 위해선 값 앞에 캐스트연산자[(data type)]을 넣어주면 된다.
int score = (int)85.4
byte b = (byte)score
- 작은 값을 큰 값으로 형변환하는 것은 값손실이 없기 때문에 묵시적으로 가능하다.
- byte→ short=char→ int→ long→ float→ double 방향으로는 자동형변환 (묵시적 변환)이 가능하다.
- 그 반대 방향으로 하려면 무조건 캐스트 연산자를 넣어줘야 한다. 그렇지 않으면 에러.
byte A = (byte)10 // 10은 int형->byte형으로 형변환된다. 4바이트->2바이트라 명시적 형변환 필수
long A = (long)10L // 10L은 int형->long형으로 형변환된다. 4바이트->8바이트라 묵시적 형변환 가능
2. 연산자
- 우선순위
- 산술 > 비교 > 논리 > 대입 순으로 진행된다.
- 단항 > 이항 > 삼항
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
byte a = (byte)10+20 //에러.
//단항연산자가 우선순위가 높아서 byte+int가 되고 이 결과 값은 int가 됨 byte=int라서 에러 뜸
byte a = (byte)(10+20) // OK
char c1 = 'a'
int i = c1+1 // char+int의 결과는 int. 따라서 에러없이 98 저장
char c2 = c1+1 //컴파일 에러
char c3 = 'a'+1 // OK
c1+1은 char+int고 결과 값은 int가 된다. int 값을 char 변수에 저장하려 했지만,
큰 값(4byte)을 작은 변수(1byte)에 저장하려면 cast 형변환을 해줘야하기 때문에 에러
에러가 나지 않게 하려면 char c2= (char)(c1+1)을 해줘야 한다.
'a'+1은 그럼 왜 될까? char+int인건 마찬가진데?
그것은 바로 리터럴 간의 연산이기 때문이다. 상수 또는 리터럴 간의 연산은 실행과정동안 변하는 값이
아니기 때문에, 컴파일 시 컴파일러가 계산해서 그 결과로 대체함으로써 코드를 보다 효율적으로 만든다.
char c2 = 'a'+1 // 컴파일 전의 코드
char c2 = 'b' // 컴파일 후의 코드
3. 랜덤함수 사용하기
Math.random() // (0~1] 까지의 랜덤으로 추출
Math.random()*10 // 0~9 까지 랜덤으로 추출
(int)(Math.random()*10)+1 // 1에서 9까지 랜덤 추출
4. 배열
- 선언.
1) 타입[] 변수이름 >> 선호되는 방법
int [] score;
String [] name;
2) 타입 변수이름[]
int score[];
String name[];
- 생성. 키워드 'new'를 사용하여 생성한다.
int[] score; //이건 선언만 한 것. 이대로는 사용 X
score= new int[5] //생성 완료. 이제 사용O
- 초기화
1) 기본형 초기화
int[] score = new int[5];
- score[0]=1; score[1]=2;
- int[] score = {1,2,3,4,5};
- int[] score = new int[]{1,2,3,4,5};
평소에는 int[] score= {1,2,3,4,5} 방식으로만 간단하게 해도 된다.
그러나, 선언과 초기화를 따로하는 경우에는 꼭 new int[]를 해줘야 한다.
int[] score;
score = {1,2,3,4,5} ; // Error
score = new int[]{1,2,3,4,5} ; // OK
함수 매개변수로 보낼 때도 필수다.
int add(int[] arr) //함수
int result = add({1,2,3,4,5}) // Error
int result = add(new int[]{1,2,3,4,5}); // OK
2) 참조형 초기화
String[] name = new String[5];
name[0]= new String("Kim");
name[1]= new String("Lee");
- String[] name= {"Kim", "Lee", "Park"};
- String[] name= {new String("Kim"), new String("Lee"), new String("Park")};
- String[] name= new String[]{new String("Kim"), new String("Lee"), new String("Park")};
- length 함수 지원됨. 따라서 길이 찾아볼 때 score.length; 하면됨 (C++은 score.length();)다.
반응형
'전공' 카테고리의 다른 글
자바 업캐스팅 다운캐스팅 (문제풀이) (0) | 2022.06.26 |
---|---|
[프로젝트 규모 산정] 기능점수(Function Point, FP) 구하는 방법 (0) | 2022.04.18 |
소프트웨어 생명주기 모델 (0) | 2022.04.17 |