자바 기본 문법에 대해 학습했다.
- 자바 프로그램의 기본 구조
우선 기본적으로 파일 이름은 public 클래스의 이름과 같아야 한다.
class내부에 메소드가 있는 구조이다.
(간단한 예시)
public class Hello //소스 파일 이름과 같아야함 Hello.java
{
public static int sum(int n, int m){
return n + m;
}
//main메소드에서 실행 시작
public static void main(String[] args){ //이 부분은 우선 암기!
//public 클래스는 하나만 존재하여야 한다.
int i=20;
int s;
char a;
s = sum(i, 10); //sum메소드를 호출했다.
a = '?';
System.out.println(a); //출력
System.out.println("Hello");
System.out.println(s);
}
저번에 배운 내용을 기본적으로 포함한다.
- 식별자
식별자는 클래스, 변수, 상수 등에 붙이는 이름이다.
특수문자, 공백 등은 사용 불가하지만 ' _ ' 와 ' $ '는 사용 가능하다.
한글도 사용 가능하다.(유니코드 문자)
당연히 키워드는 식별자로 사용 불가능하다.
Boolean literal 과 Null literal 은 식별자로 사용 불가
리터럴은 말 그대로 값 이라는 의미이다.
Boolean literal은 참과 거짓의 값을 가진다. true => 참 이라는 값 (1이 아님)
false => 거짓 이라는 값 (0이 아님)
Null literal은 reference타입에 디폴트로 넣을 수 있는 값을 가진다.
reference는 메모리를 관리하는 데이터 타입이다.
(다음 시간에 다시 / 자바는 포인터가 없다 -> 그래서 reference로 자기들이 알아서 관리한다.)
식별자를 정할 때 가독성 높은 이름을 사용하여 클린코드를 작성하는 것이 좋다.
- 자바의 데이터 타입 8가지 (=> 스택 메모리)
자바의 키워드는 다 소문자로 시작한다.
- boolean (1비트)
- char (2바이트, 유니 코드를 사용한다)
- byte (1바이트)
- short (2바이트)
- int (4바이트)
- long (8바이트)
- float (4바이트)
- double (8바이트)
String은 자바에서 기본 데이터 타입이 아니라 클래스에서 객체로 다룬다. (대문자로 시작함!)
- 자바의 레퍼런스 타입 3가지 (=> 힙 메모리)
- 배열
- 클래스
- 인터페이스
객체로 표현 가능한 3가지이다. (다음 시간에 다시...)
- 리터럴
데이터 그 자체의 값 => 정수, 실수, 문자, 논리 , 문자열 리터럴 있음
-정수 리터럴 => int형(4바이트)으로 컴파일 한다.
-실수 리터럴 => double타입(8바이트)로 컴파일한다.
-문자 리터럴 => 유니코드(2바이트)로 컴파일한다.
ex) char a = 'A'; / char c = \u0041; 직접 유니코드 값 사용 가능
-논리 리터럴 => C/C++ 과 차이가 있다!
1과 0이 아닌 true나 false로만 값을 할당할 수 있다.
-Null 리터럴 => 레퍼런스 타입에만 대입 가능하다.
ex) int n = null; ---> 이거 불가능!
- var 키워드
auto 같은 기능의 키워드이다.
지역 변수의 선언에서만 가능하고 선언과 동시에 값을 할당한다!
(메소드 안에서만 정의될 수 있는 변수가 지역 변수이다.)
클래스 멤버변수에는 사용 불가능
- 상수
C++의 const 같은 개념
final 키워드를 사용한다.
- 타입 변환
- 자동 타입 변환: 작은 타입에서 큰 타입으로 자동으로 변환
long m = 25; //25는 int타입인데
//4바이트의 공간 8바이트의 공간으로 확장
//long 타입(8바이트)으로 자동 형변환
double d = 3.14 * 10 //10이 8바이트 double로 형 변환 -> 10이 10.0으로!
-강제 타입 변환: 큰 타입에서 작은 타입으로 변환
int n = 300;
byte b = n; //n은 4바이트고 b는 1바이트임
//자동으로 변환되지 않는다.
byte b = (byte)n; //손실될 가능성이 있지만 강제로 타입 변환
//직접 ()에 데이터 타입 넣어서 변환시킨다
개발자가 필요로 하여 강제로 타입 변환을 지시한다.
- 산술 연산
산술 연산은 C++과 비슷하다.
- 비트 연산
한정된 데이터를 가지고 여러 개의 연산을 가능하게 한다.
byte b = 10; (0000 1010)
펌웨어 같은 것에 유용하게 쓰인다. 각각의 비트마다 의미를 부여한다.
비트 값을 가져오려면 & 연산을 활용한다.
byte flag = 0b00001010;
if(flag & 0b00001000 == 0) // 알고자 하는 비트 자리에 1을 넣어서 비교
System.out.println("온도는 0도 이하");
else
System.out.println("온도는 0도 이상");
- 자바에서의 키 입력
- Scanner 클래스 : System.in에게 키를 읽게 하고, 읽은 바이트를 다양한 타입으로 변환하여 리턴
java.util.Scanner 클래스 (util패키지 안에 들어있다.)
import java.util.Scanner;
.
.
.
Scanner a = new Scanner(System.in) //Scanner 객체 생성
키보드로 키 입력 -> 바이트 스트림 -> Scanner -> 자바 프로그램
스캐너객체.next 메소드로 값들을 원하는 타입으로 받는다.
Scanner scanner = new Scanner(System.in)
String name = scanner.next();
int age = scanner.nextInt();
.
.
- case문의 값
문자, 정수, 문자열 리터럴만 허용한다.
switch(a){
case a: //변수라 불가
case a>3: //수식 불가
case a==1: //수식 불가
}
실수는 들어갈 수 없다.
지금까지 기본적인 자바 문법을 알아보았다.
C++이랑 조금 다르거나 처음 보는 부분에 대해서 정리했고
다음에도 잘 기록해서 얼른 익숙해지자!