관리 메뉴

Daily IT

3. 자바 구조/컴파일/자바 타입/연산자/사칙연산 본문

개발자 영역/자바

3. 자바 구조/컴파일/자바 타입/연산자/사칙연산

IT Knowledge Share 2020. 2. 23. 19:48
728x90

3. 자바 구조/컴파일/자바 타입/연산자/사칙연산

 

[01] 컴파일 단계

   - 파일 확장자 java: 자바 소스 파일  예) Hello.java

   - 파일 확장자 class: 1차 컴파일(변환)된 파일, 바이트 코드,
     Cross Platform 지원(Windows, Unix, Linux, Mac등 대부분 OS 지원)
     . 개발 환경: Windows/Mac/Ubuntu, 서비스 운영: Linux, Unix 주로 이용
   
   - 컴파일: 영문 숫자나 특수문자로 구성된 프로그램 명령어를 기계어로
               변환하는 과정, 단순 문장을 기능이 있는 문장으로 변환하는 과정

   - 단계: JAVA 소스(문장) -> JDK(javac.exe) 컴파일 -> class 파일(바이트 코드) 
            -> JVM(java.exe, JRE) -> 메모리상에서 기계어로 재 컴파일후 -> 실행
           

   - 클래스명의 첫자는 대문자로 지정합니다.(OOP 언어 - 객체지향 언어인 자바의 규칙임)
     예) hello 소문자는 객체명으로 주로 사용합니다.

 

   - 클래스명과 파일명은 대소문자를 포함해 일치해야합니다.(Eclipse 자동 지원)  
   - 문장 마지막의 ';'은 하나의 명령의 종료를 뜻함, 생략시 에러 발생합니다.

* 컴퓨터의 구조: 폰 노이만 구조
- 프로그램을 메모리에 저장한후 실행

 

 

[연습 1] 컴파일/실행 테스트

  - Eclipse Setting 
     . Project Type: Java Project 
     . Project Name: test 

 

-----------------------------------------------------------------------------------

package test;

public class One {

  public static void main(String[] args) {
    System.out.println("자바 컴파일");
    System.out.println("자바 실행");
  }
}

-----------------------------------------------------------------------------------

* 실행결과 *

 

[연습 2] 컴파일/실행 테스트 

  - Eclipse Setting 
     . Project Type: Java Project 
     . Project Name: myITcareer

 

-----------------------------------------------------------------------------------

package test;

public class myITcareer {

  public static void main(String[] args) {
    System.out.println("나의 IT 블로그입니다");
  }
}

-----------------------------------------------------------------------------------
 * 실행 결과 *

[02] 변수명(식별자, Identifier) 규칙
- 프로그램: 입력 --> 처리 --> 출력 방향으로 진행
- 데이터 처리시 저장소를 변수로 이용함.
- 변수에는 메모리가 할당됨.
- 변수명은 할당된 메모리에 붙이는 이름(별명)
- 첫 문자가 영문자나 '_', '$'의 일부 특수문자로 시작되어야 한다.
  숫자로 시작할 수 없다.
- 한글을 사용할 수도 있으나 특정 서버에서 한글이 깰질수 있음으로 사용하지 않음.

- 자바의 예약어(boolean, class, public...)는 변수명(식별자)으로 사용할 수 없다.

- 자바의 변수명(식별자)은 대소문자를 구분한다.

- 변수명(식별자)은 길이는 제한이 없고 공백은 포함할 수 없다.
  일반적으로 5 ~ 15자를 권장합니다. (의미에따라 4자 이하도 상관 없음)
- 변수명은 값을 연상 할 수 있도록 의미있게 지정해야한다.
  . abc         X 의미 없음.
  . abc1       X 의미 없음.
  . my name X 공백 존재
  . korean    O
  . trip        O

  예) String name = "왕눈이";  ← name 이란 이름의 메모리에 문자열 "왕눈이"를 저장
       int java = 90;                ← java란 이름의 메모리에 정수 90을 저장
   

[!중요!] 수치형 데이터 타입을 이해하기위해 2진수를 이해할 필요가 있음.
   - 2진수, 8진수, 10진수, 16진수의 변환 파악
   - 2진수의 원리
     2^1 = 2가지 표현 (2)
     2^2 = 4가지 표현 (2 X 2)
     2^3 = 8가지 표현 (2 X 2 X 2)
     2^4 = 16가지 표현 (2 X 2 X 2 X 2)
     2^5 = 32가지 표현 (2 X 2 X 2 X 2 X 2)
     2^6 = 64가지 표현 (2 X 2 X 2 X 2 X 2 X 2)
     2^7 = 128가지 표현 (2 X 2 X 2 X 2 X 2 X 2 X 2)
     2^8 = 256가지 표현 (2 X 2 X 2 X 2 X 2 X 2 X 2 X 2)
     10진수로 변환: 0 ~ 255

  

* 컴퓨터 저장 용량의 사용예

 1) 1 Bit: 0(0v), 1(5v) -> 건전지에 연결된 전구의 구조, 스위치를 이용한 전원 차단, TR -> IC

 2) 1 Byte: 8 bit       -> 한글 1자: 2 Byte, 영숫자: 2 Byte, 전구 8개 연결, 네트워크 전송 단위,
                               Arduino ARM process 크기 (C 언어: 한글 1자: 2 Byte, 영숫자 1 Byte) 

 3) 1 KByte: 1024 Byte   -> 한글 512자, 영숫자: 512 자, OS 저장 단위

 4) 1 MByte: 1024 KByte -> MP3 음악 1곡 6 MByte, 사진 1장 1~1.6MB

 5) 1 GByte: 1024 MByte -> MP4 영화 1편 3.5 GByte (Smartphone: 32 GB, 64 GB, 128 GB...)

 6) 1 TByte: 1024 GByte  -> 한국인이 하루에 마시는 지역별 커피의 시간대/브랜드/종류/용량,
                                     Bigdata 파일, 국가 단위 데이터

 7) 1 PByte: 1024 TByte  -> 국가 및 대륙단위 데이터
 8) 1 EByte: 1024 PByte  -> 전세계의 통계

 9) 1 ZByte: 1024 EByte  -> 전세계의 통계, google등 사용
 
  
 
[03] 데이터 형(data type)
   - 프로그램: 데이터 입력 기능 → 데이터 처리 기능 → 처리 결과 출력 기능
     데이터 분석: 데이터 입력 기능 → 통계기반 요약/분류 → 결과 출력
     머신러닝: 데이터 입력 기능 → 규칙 발견 → 모듈 검증 및 출력

   - 데이터를 입력하여 메모리에 저장하며,
     메모리에 저장된 데이터를 처리할 때 자바는 데이터의 타입을 알아야 처리가 진행됩니다.
     사전에 자바 내부에 지정된 데이터 타입을 기준으로 데이터에 타입을 선언하며,
     자바가 메모리를 할당하는 기준이됩니다.
  
   - 요약하면 메모리를 사용하는 기준이됩니다.
  

   - CPU와 메모리의 한계 때문에 데이터타입은 정확하게 지정하는것을 권장합니다.
     (많이 사용되는 데이터 타입이 있음)
 
   - Python, Javascript, R등의 언어는 코딩없이 자동으로 언어 내부에서 데이터 타입 처리됨.
 
   - Primitive type: 고전적인 타입, 원시 타입, 크기가 지정되어 있어 크기 변경을 못합니다.
     예) int: 정수, 4 byte

   - Reference type: 메모리 참조타입, 복합 타입으로 Primitive type이 1개이상 결합되어
     사용되는 경우가 많습니다. 크기를 필요에따라 변경 할 수 있습니다.
     예) Developer, Student, Korea, Seoul, Desktop, String...
          

1. 논리형(logical)(*)

   - boolean: 1 Byte(8 Bit)

   - 초기값 : false

   - 갖을 수 있는 값의 범위: true, false

   - 조건문(제어문)에서 조건이 참/거짓인지 판별하는 기준으로 쓰입니다.

   - 제어문에서 많이 사용됩니다. 

     예)

     boolean sw = true;  타입 변수명 = 값;
 


 

2. 문자 관련 자료형

1) 문자형(character)

    - char: 2 Byte(16 Bit)

    - 초기값 : \u0000

    - 범위: \u0000 ~ \uFFFF(Unicode 0~65535)
    - 한 문자만 저장가능하며 ''(single quotation)으로 시작과 끝을 명시합니다.

      예)

      char grade = 'A';

      char grade = '수';

 
2) 문자열 형(Stirng)(*)
    - 가변 길이, 문자열에따라 메모리가 할당됩니다.
    - ""(double quotation)으로 시작과 끝을 명시합니다.

    - char 문자가 나열된 형태
      예)

      String str = "ABCD";
 

 

 

3. 정수 숫자형(음의 정수, 양의 정수)(integer)(*)
   - byte: 1 Byte

     . 초기값: 0(양수) 

     . 값의 범위: -128 ~ 127, -(2^7) ~ 0 ~ 2^7-1 

   

   - short: 2 Byte, 2^16 = 65536가지 표현

     . 초기값: 0(양수)

     . 값의 범위: -32768 ~ 32767, -(2^15) ~ 0 ~ 2^15-1

   

   - int: 4 Byte, 2^32(*)

     . 초기값: 0(양수)

     . 값의 범위: -2147483648 ~ +2147483647, -(2^31) ~ 2^31-1

 

   - long: 8 Byte, 2^64

     . 초기값: 0(양수)

     . 값의 범위: -(2^63) ~ 2^63-1

    예)   

    int java = 80;

    int jsp = 90;

    int spring = 70;

    int project = 100;
    long sales = 100000000000L;

 
 

4. 실수 숫자형(real number)
   - 지수는 정수를 한개만 남기고 모두 소수점 이하의 수로 변환한 형태
   - 지수 표현: 1e+5 -> 1 * 10^5, 12345 -> 1.2e+4 -> 12000
                    1e-5 -> 1 *  (10^-5) 0.00001 -> 1.0e-4 -> 0.0001

 

   - float: 4 Byte

     . 초기값: 0.0f

     . -1.40e-45 ~ +3.40e+38

 

   - double: 8 Byte(*)

     . 초기값: 0.0

     . 값의 범위: -4.94e-324 ~ 1.79e+308
     . 기본적으로 인식되는 타입

 

   - 보통 소수점은 소수이하 3자까지 사용됨, 머신러닝은 6자리 이하도 사용됨.
     200.123
 
 
5. 데이터 타입 연습

    

-----------------------------------------------------------------------------------

public class DataType {

  public static void main(String[] args) {
    boolean truth= true;
    boolean lie = false;
    char grade = 'A';
    String score = "90점";
    short 짧은길이 = 5;
    int 중간길이 = 7;
    long 긴길이 = 14L;
    long 긴길이1 = 16;
    float percent = 0.5f;
    double percent1 = 0.7;
    
    System.out.println(truth + " / " + lie);
    System.out.println(grade + " / " + score);
    System.out.println(짧은길이 + " / " + 중간길이 + " / " + 긴길이 + " / " + 긴길이1);
    System.out.println(percent + " / " + percent1);
  }
}

-----------------------------------------------------------------------------------

 *실행 결과*


 
 
[04] 연산자(operator: 기사, 조작자, 데이터 조작자)
      - 단항 연산자: 하나의 변수로 연산이 진행
      - 산술 연산자: 사칙연산(*)
      - 비교 연산자: 대소비교, 동일한지 비교(*)
      - 논리 연산자: 참, 거짓 연산자(*)
      - 삼항 연산자: 조건식, 참, 거짓 결합
      - 대입 연산자: 값의 대입(*)

   
 


 
1. 산술(수치) 연산자 : +, -, *(×: 곱하기), /(÷: 나누기), %(나머지, 모듈러스 연산자)

   - 정수 / 정수 = 정수
     예) 10 / 3 = 3.333333(X)
          10 / 3 = 3(O) 소수점 짤림, 반올림 안됨.

 

   - float n = 0.0f; f를 제거하면 double 8바이트가 되어 에러가 발생함.

     double n = 0.0; <- 기본 형식

 

 

1) 나누기 연산자: 몫만 산출됨, 소수점 짤림, 반올림 안됨.

0 / 3 = 0

1 / 3 = 0 <- 주의 0.3 아님!

2 / 3 = 0 <- 주의 0.6 아님!

3 / 3 = 1

4 / 3 = 1 <- 주의 1.3 아님!

5 / 3 = 1 <- 주의 1.6 아님!

6 / 3 = 2
7 / 3 = 2

 

 

2) 몫을 뺀 나머지 연산자, 3으로 나누었을 때의 나머지는 0 ~ 2가됨

1 % 3 = 1

2 % 3 = 2

3 % 3 = 0
 
4 % 3 = 1

5 % 3 = 2

6 % 3 = 0
 

7 % 3 = 1

8 % 3 = 2

9 % 3 = 0

 
어떤수를 나누었을때 나머지가 0이면 어떤수의 배수입니다.
 

 

2. 대입(할당, 메모리에 기록) 연산자 : =

   - 좌변은 상수(숫자, 문자, 문자열, constant)값이 아니라 기억장소(변수(식별자, 메모리))가
     와야합니다.
     100 = 100 + 200;  // ERROR, 좌변 ERROR
     "March" = "3" + " month"  // ERROR
     int year = 2016;

   - 할당(대입) 연산자의 양면성
     int festival = year;
     '='을 기준으로 오른쪽의 변수는 메모리에서 값을 가져오는 역활을하며,
     왼쪽의 변수는 값이 저장될 메모리 역활을 합니다.

 

     1) int value1 = i + j;

     2) int value2 = 10 + 20;

     3) int 100 = i + 10;   // ERROR, 숫자 100은 기억 장소 아님

     4) int value3 = 10.5;  // ERROR, 10.5는 double 8 byte, value3: int 4 byte
     5) double value4 = 10.5;
     6) long year = 2015;  // long: 8 byte
     7) int avg = 95.5;      // ERROR, int 4 byte <- double 8 byte
     8) int avg = (int)95.5; // (int 4 byte)(double 8 byte) 소수점이하 삭제되고 95 할당

 
 
3. 기타 연산자

   - 증가/감소 연산자: ++(1씩 증가), --(1씩 감소)
   - 연산후대입 연산자: +=, -=, *=, /=, %=

 

'개발자 영역 > 자바' 카테고리의 다른 글

6. if문 연습2  (0) 2020.02.24
5. if문 연습  (0) 2020.02.24
4. if문  (0) 2020.02.24
2. 이클립스 설치  (0) 2020.02.23
1. 자바 설치 및 삭제  (0) 2020.02.23
Comments