[JAVA] 소스파일 구문 분석

김윤섭·2023년 9월 7일
0

JAVA

목록 보기
10/27
post-thumbnail

1. 소스파일 구문 분석

package hello;

public class HelloJava {
	 // 프로그램 소스의 최소 단위(=class)
	 // 클래스 이름은 소스파일의 이름과 동일하게
	 // 영어/숫자/언더바(_)만 사용
	 // 첫 글자는 반드시 영어로

	public static void main(String[] args) {
		//프로그램의 시작점을 의미하는 블록 -> 메인메서드
		System.out.println("Hello Java~");
		System.out.println("Hello Java~");
		System.out.println("자바시간");
		System.out.println("프린트 작성");
        	// 콘솔에 문장을 출력하기 위한 명령어
			// 문장을 표현하는 방법 -> 쌍따옴표로 묶는다.
	}

}
  • 소스는 블록간의 중첩으로 구성
    -하나의 블록 = {...}
  • 블록안에 명시되는 명령어는 세미콜론 (;)으로 문장의 끝을 표현
  • 에러가 났을 때 빨간 줄에 갖다두면 이유 알려줌 cf. Syntax error : 문법오류
  • 문장을 표현하는 방법 -> 쌍따옴표로 묶는다. -> 문자열

2. 주석문

(1) 주석문이란?

  • 프로그램 소스코드 안의 설명문
  • 주석문은 프로그램으로 컴파일 되지 않는다.
  • 특정 명령문이 실행되지 않도록 차단하는 용도로 사용할 수 있다.

(2) 주석문의 종류 : 무엇을 사용하는 지는 자유

  • 한 줄만 처리하는 주석문 : //

    "//"가 앞에 명시된 라인은 주석으로 인식

  • 여러 줄을 처리하는 주석문 : /* */

    /⁎
    이 블록 안에서는 여러라인을 주석으로 처리할 수 있다.
    ⁎/

3. 변수의 이해

  • 변수 : 변할 수 있는 수

(1) 변수란?

  • 다양한 종류의 자료를 표현할 수 있는 값
  • 웹 페이지에서 처리하고자 하는 "데이터"
  • 자바에서는 각각의 수를 담을 수 있는 변수가 다양하게 표현됨.

(2) 자료형 (data type)

  • 프로그래밍 언어에서 변수의 종류를 구별하기 위해 사용되는 키워드
  • 자바에서 제공되는 자료형의 종류 8가지 : 기본 자료형 (Primitive Data Type)

(3) 자료형이 가지는 의미

  • 모든 변수는 컴퓨터의 메모리 영역에 생성
  • 일반적으로 메모리란, PC에 설치하는 RAM을 의미
  • 4byte의 크기를 갖는 변수값 하나를 생성할 경우, PC의 RAM에서 해당 용량만큼을 사용하게 된다.
  • 변수는 RAM의 크기를 넘지 않는 범위 안에서만 생성 가능 (용량이 넘어서는 경우 OutOfMemory 에러를 발생)

(4) 문자열 데이터

  • 프로그램 코드에서 "문장" 표현
  • String : 문자열 표현 (앞 자리 반드시 대문자)
  • 글자수에 상관 x : 쌍따움표("")로 할당
  • 숫자와 문자열을 분명하게 구별해야한다 아니면 문자열로 통합됨.

(5) 변수의 사용방법

  • "선언"과 "할당"으로 구분

  • 변수의 선언 : 그릇을 만들어 이름 붙이기
    - 데이터형(int, double...) + 변수 이름(원하는 이름) + ;

    int num;
  • 변수의 할당 : 그릇에 데이터 담기
    - 선언된 변수에 원하는 값 대입
    - 변수이름+ 대입연산자 (=) + 원하는 값 -> 우변에서 좌변으로 대입

    num = 100;
    
  • 🎈대입연산자 (=): "같다"라는 뜻으로 x, 그릇에 데이터를 담는다는 뜻

  • 선언과 할당의 통합
    - 데이터형 + 변수이름 + 대입연산자 (=) + 값 + (;)

    int num = 100;
  • 문자열 데이터
    - String + 쌍따옴표로 묶인 값 대입
    - 빈 문자열 / 공백도 데이터

        String msg = "안녕하세요.    자바"; <- 공백 포함 문장 표현
    		String blank = ""; <- 빈 문자열 값
    		String age = "20"; <- 20을 숫자가 아닌 문자열로 인식
  • 문자열 데이터의 덧셈
    - 문자열 + 문자열 : 두 문장을 하나로 합쳐준다.
    String language = "JA"+" VA"; -> "JA VA"

  • 문자열 + 기본자료형
    - 기본자료형의 데이터가 문자열로 변환 & 합쳐진다.

    ```
    	int age = 20;
    String name = "자바학생";
    String result = name + age; -> 오류안남
    	-> "자바학생"+20
    	-> "자바학생20"
    ```
    - 변수 이름 명명 규칙
    - 변수 이름은 영문, 숫자, "_", "$" 만 사용 가능
    - 변수 이름 첫글자 : 숫자 x
    - 대/소문자 구분 & 오타주의
    - 자바에서 사용하는 예약어 사용 x cf. int, class, public 등등
    - 클래스 이름 규칙도 동일

    (6) 변수의 할당

  • long, float, double은 다른 데이터 형과의 구별을 위해(for 가독성) 값 뒤에 데이터형의 첫 글자를 접미사로 가질 수 있다.

  • 접미사는 대/소문자 가리지 않지만 가급적 대문자

  long money = 50000000L;
   float Pi = 2.14F;
   double lat = 128.32452D;
  • boolean은 true(참), false(거짓) 중 하나
	boolean user = true;
	boolean isJapanese = false;
  • char는 홑따옴표('')로 감싸진 한 글자만 대입
	char c = '가';

(7) 값의할당 방법

  • 생성된 변수는 반복하여
	int num1 = 100;
	num1 = 200;     // 재할당 -> 에러 x, 100-> 200으로 바뀜
	int num1 = 300; // 재선언 및 재할당 -> 에러 / 그릇을 또 만들 수는 없기 때문에
  • 선언되지 않은 변수는 사용할 수 없다.
	int num1 = 100;
	num1 = 200;
	num2 = 300; //에러, num2 그릇 안 만들어짐
  • 값 없는 변수는 다른 변수에 대입 x , 출력 x
    int num1;                  //에러x, 그릇 선언
	int num2 = num1;           //에러 , num1에 값이 없으므로 할당이 x
	System.out.println(num1);  //에러

(8) 상수 = 변하지 않는 수 // 발생할 수 있는 오류의 수를 줄여줌

  • 변수와 마찬가지로 메모리상에 존재 but, 값 변경 x
  • final 키워드 사용
final int age = 20;
	final long money = 12000000L
	final float pi = 3.14F;
  • 메모리상에 이름이 생성되서 접근은 가능, 변경은 x (읽기 전용)
	final int AGE = 20;
	age = 21;		// 에러
  • 상수 선언은 대문자로 (헷갈리니까, 암묵적인 약속)

4. 연산자

(1) 연산자

  • 연산을 수행하는 특수기호
    (2) 대입연산자 (=)
  • 변수에 숫자나 문자열 입력 or 다른 변수에 할당
    (3) 사칙 연산자

    더하기(+), 빼기(-), 곱하기(*), 나눗셈의 몫(/), 나머지(%)

    cf. 10나누기3 = 몫 : 3, 나머지 : 1
    -> 10/3 = 3
    -> 10%3 = 1
    ->모든 수는 0으로 나누기 x

(4) 단항 연산자

  • 변수에 대한 연산 결과를 다시 자기 자신에게 적용시킬 때
  • 다시 자기 자신에게 대입하고자 하는 경우의 약식표현
	int x = 100
	x = x + 5
--------------------------
	int x = 100
	x += 5;

단항 연산자는 모든 사칙 연산자의 표현이 가능
+= , -= , *= , /= , %=

(5) 증감 연산자

  • 특정 변수에 저장되어 있는 값을 1씩 증가, 감소 시킬 때
  • 계산값이 1일때, 덧셈과 뺄셈은 단항 연상자에서 한번 더 축약가능

덧셈

	x = x + 1;
	x += 1;
	x++;
	++x;

뺄셈

	x = x - 1;
	x -= 1;
	x--;
	--x;

✨x++와 ++x의 차이

- 증감 연산자는 그 자체가 다른 연산식의 피연산자
- 증감연산자의 표시 위치에 따라 결과가 서로 다르게 적용됨      

x++ 경우 : 증감연산자가 뒤
- x의 값을 수식에 먼저 적용한 뒤, x에 대한 1증가처리

 		int a = 100;
		int x = 1;
		int y = a + x++;       //100+1 그후에 x+1
		System.out.println(y); //101 
		System.out.println(x); //2

++x 경우 : 증감연산자가 앞
- x 값을 1증가 시키고 그 뒤에 수식 적용

		int a = 100;
		int x = 1;
		int y = a + ++x;       // ++x -> 2 그다음, 100+2
		System.out.println(y); // 102
		System.out.println(x); // 2

(6) 비교 연산자

같다 ==
다르다 !=
초과 >
이상 >=
미만 <
이하 <=

  • 두 개의 변수값 간의 관계 비교, 참(true) or 거짓(false)의 결과를 반환
  • 주어진 식이 참이나 거짓으로 판별되므로 boolean값으로 생성
	int x = 100;
	int y = 1;
	boolean r = x < y;
	System.out.println(r);	//"false"

(7) 논리 연산자

  • 좌변과 우변의 논리를 연산, 참(true) or 거짓(false)의 결과를 반환
  • 두개 이상의 비교 연산자의 결과
  • boolean 값에 대해 추가로 "AND"나 "OR"연산을 수행

cf. "AND" = 로그인 할 때, ID도 true하고 "AND" PW도 true해야 TRUE
"OR" = 잠실 갈 때, 2호선 "OR" 8호선 타면 TRUE

"AND" : &&

  • 두 개의 boolean값을 비교해서 모두 true일 때 true
    "OR" : ||
  • 두 개의 boolean값을 비교해서 둘 중 하나라도 true일 때 true
		int a = 100;
		int b = 200;
		int x = 5;
		int y = 3;
		
		boolean result1 = a != b || a == b; 
		boolean result2 = a < b && x > y;   
		boolean result3 = a < b && x < y;  
		boolean result4 = a > b || x > y;   
		boolean result5 = a > b || x < y;   
		
		System.out.println("result1 = " + result1);	//"result1 = true"
		System.out.println("result2 = " + result2);	//"result2 = true"
		System.out.println("result3 = " + result3);	//"result3 = false"
		System.out.println("result4 = " + result4);	//"result4 = true"
		System.out.println("result5 = " + result5);	//"result5 = false"

cf. java에서 "!"는 부정을 나타냄

5. 형변환(Casting)

(1) 형변환이란?

  • 변수의 자료형이 변환되는 것
  • 특정 자료형의 값을 다른 자료형의 변수에 대입 가능
  • "암묵적 형변환", "명시적 형변환" 두 종류
  • 최대한 데이터의 손실이 없게 하기 위해

(2) 암묵적 형변환

  • 데이터 손실이 없는 방향으로 컴파일러가 자동으로 형변환 해줌.
  • 서로 다른 자료형을 연산 혹은 대입할 때, java 컴파일러가 자료형을 통일하는 것
	int a = 100;	//정수형
	float b = a; 	//정수형을 실수형에 대입가능한 이유 : 컴파일러의 암묵적 형변환
  • 암묵적 형변환을 통해 어떤 변수가 더 큰 범위의 변수로 대입 가능

  • 역방향(다운캐스팅)은 안됨 -> 명시적 형변환 필요

(3) 명시적 형변환

  • 데이터의 손실을 감수하더라도, 강제로 형변환 시키는 형태
	자료형 b = a; //에러
	자료형 b = (변환할 자료형 형식)a;
  • 실수형 -> 정수형 : 소수점 이하는 버려짐
	double a = 3.14d;
	int  b = (int) a;	// 3
profile
안녕하세요

0개의 댓글