yoni

[03] 컴파일, 자바 프로그램의 구조, 데이터 형(data type), 연산자(Operator), 사칙연산 본문

java of educational by contents

[03] 컴파일, 자바 프로그램의 구조, 데이터 형(data type), 연산자(Operator), 사칙연산

yoni-1117 2018. 12. 1. 12:25

[01] 컴파일 단계

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

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

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

 
   - 클래스명(파일명)의 첫자는 대문자로 지정합니다.
     예) hello 소문자는 객체명으로 주로 사용합니다.

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

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

 
 
[실습 1] 컴파일/실행 테스트
 
[실행 화면]
자바 컴파일
자바 실행
15
35
55
27
127
매출액: 1000500
1500 원
매출액: 1500
 
▷ /src/One.java  <- 대소문자 주의
-----------------------------------------------------------------------------------
 
public class One {
 
  public static void main(String[] args) {
    System.out.println("자바 컴파일");
    System.out.println("자바 실행");
    System.out.println(10 + 5);
    System.out.println(10 + 5 + 20);
    System.out.println(10 + 5 + 20 * 2);
    System.out.println((10 + 5 + 20 * 2)/2);
    System.out.println((10 + 5 + 20 * 2)/2 + 100);
    System.out.println("매출액: " + 1000 + 500); // 문자열로 변환
    System.out.println(1000 + 500 + " 원"); 
    System.out.println("매출액: " + (1000 + 500));
  }
 
}
 
   
   
-----------------------------------------------------------------------------------
  
 
  

[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진수의 변환 파악
  
* 컴퓨터 저장 용량의 사용예
 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와 메모리의 한계 때문에 데이터타입은 정확하게 지정하는것을 권장합니다.
     (많이 사용되는 데이터 타입이 있음)
 
   - Javascript(Web), R(데이터 분석), Python(인공지능)등의 언어는 자동으로 데이터 타입 처리됨.
 
   - Primitive type: 고전적인 타입, 원시 타입, 크기가 지정되어 있어 크기 변경을 못합니다.
     예) int: 정수, 4 byte

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

     
 
    
      
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)(*)

   - 2진수의 원리
     2^8 = 256가지 표현 ( 2 X 2 X 2 X 2 X 2 X 2 X 2 X 2) (8개의 스위치)
     10진수로 변환: 0 ~ 255
 
   - byte: 1 Byte
     . 초기값: 0(양수) 
     . 값의 범위: -128 ~ 127, -(2^7) ~ 0 ~ 2^7-1 
       0 0 0 0   0 0 0 0 --> 0       
                         +1
       0 0 0 0   0 0 0 1 --> 1
                         +1
       0 0 0 0   0 0 0 2 --> X
       
       0 0 0 0   0 0 1 0 --> 2
                         +1
       0 0 0 0   0 0 1 1 --> 3
       0 0 0 0   0 1 1 1 --> 7
       0 0 0 0   1 1 1 1 --> 15
       0 0 0 1   1 1 1 1 --> 31
       0 0 1 1   1 1 1 1 --> 63
       0 1 1 1   1 1 1 1 --> 127 양수
       첫번째 비트를 부호 비트: 0-양수,1-음수 
 
       1 0 0 0   0 0 0 0 --> 128 -> -128 음수
       1 0 0 0   0 0 0 1 --> 129 -> -128+1 -> -127 음수
       1 0 0 0   0 0 1 0 --> 130 -> -128+2 -> -126 음수
       .....
       1 1 1 1   1 1 1 1 --> 255 -> -128+127 -> -1 음수
       0 0 0 0   0 0 0 0 --> 0
       0 0 0 0   0 0 0 1 --> 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.00001

 
   - 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. 데이터 타입 실습

[실행 화면]

sw
true
false
sw=false
------------------------
chr=A
 
movie=부산행
컨저링 2(★★★★★)
------------------------
급여1: 2000000
급여2: 2000000500000
급여3: 2500000
연봉: 26000000
------------------------
100의 100%: 100
100의 50%: 50
100의 50%: 0
 
100의 100%: 100
100의 100%: 100.0
100의 50%: 50.0
100의 95%: 95.0
100의 10%: 10.0
100의 1.96%: 1.96
100의 1.64%: 1.6400000000000001
100의 1.28%: 1.28
1
100의 0.15%: 0.15
100의 0.075%: 0.075
   
▷ Test.java
- 정수 / 정수 = 정수, 소수점 짤림, 반올림 안됨
 예) 10 / 3 = 3.3 (X)
      10 / 3 = 3 (O)
      5 / 10 -> 0.5 -> 0

- 정수 / 실수 = 실수, 소수점 출력
 예) 10 / 3.0 = 3.3333333 (O)

 
-----------------------------------------------------------------------------------
 
public class Test {
 
  public static void main(String[] args) {

 
  }
 
}
  
      
-----------------------------------------------------------------------------------
 
 
 
[04] 연산자(operator: 기사, 조작자, 데이터 조작자)
      - 단항 연산자: 하나의 변수로 연산이 진행
      - 산술 연산자: 사칙연산(*)
      - 비교 연산자: 대소비교, 동일한지 비교(*)
      - 논리 연산자: 참, 거짓 연산자(*)
      - 삼항 연산자: 조건식, 참, 거짓 결합
      - 대입 연산자: 값의 대입(*)
   
   
 
 
1. 산술(수치) 연산자 : +, -, *(×: 곱하기), /(÷: 나누기), %(나머지, 모듈러스 연산자)
   - 정수 / 정수 = 정수
     예) 10 / 3 = 3.3333(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) 몫을 뺀 나머지 연산자, 13으로 나누었을 때의 나머지는 0 ~ 12가됨
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. 대입 연산자 : =
   - 좌변은 상수(숫자, 문자, 문자열)값이 아니라 기억장소(변수(식별자, 메모리))가
     와야합니다.
   - 할당(대입) 연산자의 양면성
     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씩 감소)
 
 
[출력 화면]

0
0.6666666666666666
2
0
2010
2011
2012
2013
2014
2015
2014
su1: 1
su2: 1
sum: 1
  
▷ /src/Year.java
-----------------------------------------------------------------------------------
 
public class Year {
 
  public static void main(String[] args) {

    System.out.println("su1: " + su1);
    System.out.println("su2: " + su2);
    System.out.println("sum: " + sum);
  }
 
}
 
   
-----------------------------------------------------------------------------------

 


Comments