본문 바로가기

카테고리 없음

2. 자바 문법 (1)

자바 기본 문법에 대해 학습했다.

 

  • 자바 프로그램의 기본 구조

우선 기본적으로 파일 이름은 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가지 (=> 스택 메모리)

자바의 키워드는 다 소문자로 시작한다.

 

  1. boolean  (1비트)
  2. char   (2바이트, 유니 코드를 사용한다)
  3. byte   (1바이트)
  4. short  (2바이트)
  5. int      (4바이트)
  6. long   (8바이트)
  7. float   (4바이트)
  8. double   (8바이트)

String은 자바에서 기본 데이터 타입이 아니라 클래스에서 객체로 다룬다. (대문자로 시작함!)

 

  • 자바의 레퍼런스 타입 3가지 (=> 힙 메모리)
  1. 배열
  2. 클래스
  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++이랑 조금 다르거나 처음 보는 부분에 대해서 정리했고

다음에도 잘 기록해서 얼른 익숙해지자!