본문 바로가기

전공

JAVA 시험 전에 보고가는 요약집 #1

반응형

 

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();)다.
  •  

 

반응형