JAVA

2016-05-20: 진법과 자료형

imageimage

image

image

image

image

연산자에 들어가고 있다. 진법 변환과 자료형에 대해서 너무나 좋은 강의를 들었다. 미래에 관해서는 잘 모르겠지만… 학습 품질에 관해서는 선택을 잘 한 것 같다. 재미있게 배우는 중. 물론 과제나 시험에선 좀 괴롭겠지만… 지금은 일단 즐기고 있다.

2016-05-20: 진법과 자료형 더 읽기"

2015-05-19: 변수와 상수

변수: 값을 저장할 수 있는 메모리 상의 공간(기억공간)

variable 미국식 [|veriəbl;|vӕriəbl] 영국식 [|veəriəbl]
[형용사] 변동이 심한; 가변적인 참고 invariable
variable temperatures(가변적인 기온)
출처: http://endic.naver.com/enkrEntry.nhn?sLn=kr&entryId=205d8e9c40c7439da55eebd7e85c3507&query=variable

java_20160519

사용법

자료형 변수명; // 변수 선언
int num;
String name;
num=50; // 자료 저장(초기화)
name=”Hong”; // 문자열은 “”로 묶어준다.
num=30; // num이 30이 된다. ‘변수’ 값이 바뀜.

변수 선언과 초기화를 분리하는 것이 보기에 좋다.(취향의 문제)

자료형 종류는 8가지.

  • 실무에서 사용하는 것은 4~5가지 정도임
    • boolean, int, double, String 등

변수명은 마음대로. 선언은 한 번만!

int num = 50;
int num = 30; // 오류!

변수 선언 및 출력

자바의 정석 21쪽

01
02
03
04
05
06
07
08
09
10
11
12
13
14
class VarEx1 {
    public static void main(String[] args) {
        int year = 0, age = 14;
 
        System.out.println("Year:" + year);
        System.out.println("Age: " + age);
         
        year = age + 2000// age + 2000 = year
        age = age + 1;      // age + 1
         
        System.out.println("\nYear:" + year);
        System.out.println("Age: " + age);
    }
}

실제로 수학에서는 age + 2000 = year 이지만 컴퓨터에서는 year = age + 2000 식으로 사용

  • 내부에서 ADD 명령 처리하는 과정

clip_image001

변수를 선언하여 값을 저장하고 출력.

누적 연산

age += 1; // age = age+1; 또는 age++; 과 동일

참고

= (대입 연산자)는 어떤 식보다도 늦게 수행된다.

임시 변수

입력/출력을 하지 않고 임시로 사용되는 것

보통 일반적인 경우 tmp, temp 라는 이름으로 사용됨

예: a, b의 값을 서로 교환할 때
temp = a;
b = a;
b = temp;

변수의 명명규칙

  • 숫자 시작(x)
  • 특수문자는 _와 $만 허용

권장하는 규칙

  • 상수의 이름은 모두 대문자로.

final int MAX=100; // C언어에서 const와 같이 JAVA에서는 final을 사용해 변수를 상수화 시킴. 값을 잠가 다른 값으로 변경할 수 없게 만듦. MAX 처럼 모두 대문자를 사용. 여러 단어로 이루어진 경우 _을 붙여준다.(MAX_NUMBER)

  • 변수명이 길어지더라도 그 변수가 어떤 역할을 하는지 유추할 수 있게 하면 좋다.

변수의 타입

  • 기본형(Primitive Type)

    논리

    문자

    정수

    실수

    boolean: 1

    char: 2

    byte: 1

    short: 2

    int: 4

    long: 8

    float: 4
    double: 8

  • 참조형(Reference Type)
    • 주소를 값으로 갖는다. 주소가 저장됨. 참조변수.

참고

printf

  • C언어의 printf처럼 JAVA에서도 실수의 소수점을 원하는 대로 표시 가능.(잘 사용하지는 않는다)

System.out.printf(“점수: %d \n”, score); // %d: score를 정수 형태로 찍어라, \n: 줄바꿈
System.out.printf(“a: %d, pi: %f \n”, a, pi); // 여러 개를 표시 가능.

  • printf(“%4.2f”, pi); // 아래와 같이 저장됨. 4칸을 가지고, 소수점도 칸을 차지.

    3

    .

    1

    4

만약 큰 값이 오면 정수부는 최대한 살리고 소수점이 영향을 받음.

입력 받기 – Scanner

Scanner는 java.lang (기본)에는 없고, java.util 패키지에 있음. 같은 일을 하는 패키지를 모음.

C언어에서 Header File을 Include 하듯, JAVA에서는 Import 하면 된다.

  1. package: 문서의 맨 위에 작성.
  2. import: Scanner를 사용하려면 import를 사용.
  3. class:

자바의 정석 p.41 입력 받고 출력하기

01
02
03
04
05
06
07
08
09
10
11
12
13
14
import java.util.Scanner;
 
class ScannerEx {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        System.out.print("input one number ");
        String input = sc.nextLine();
        int num = Integer.parseInt(input);
         
        System.out.println("value: " + input);
        System.out.printf("num = %d%n", num);
    }
}

clip_image002

실행 결과

import java.util.Scanner; // java.util.* 을 전부 임포트 하면 좀 그렇겠지??

Scanner scanner = new Scanner(System.in)

  • Scanner: 클래스
  • scanner: 변수
  • new: 명령어
    • 클래스를 로딩시키는 것

String input = sc.nextLine();
nextLine(); // 스페이스바 포함해 키보드로 입력받음(문자열)
next(); // 스페이스 바 이전의 단어만 인식(문자열). 거의 사용하지 않음.
sc.nextLine(); // 결과가 문자열로 나옴

int num = integer.parseInt(input);

  • integer 클래스 속의 parseInt() 함수
  • parseInt(); // 정수 형태의 문자열을 정수로 바꿔줌.

실습1 이름과 나이 입력받아 출력하기

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
class TestScanner1 {
    public static void main(String[] args) {
        String name, tmp; // init name, tmp
        int age; // init age
         
        Scanner sc = new Scanner(System.in);
         
        System.out.print("input your name ");
        name = sc.nextLine(); // input name
         
        System.out.print("input your age ");
        tmp = sc.nextLine(); // input age
         
        age = Integer.parseInt(tmp); // age (String to Integer)
         
        System.out.print("\nName: [" + name + "] and... "); // results
        System.out.printf("Age : [%d] ^_^", age);
    }
}

clip_image003

실행결과

실습2 두 개의 숫자를 입력 받아 출력

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
class TestScanner2 {
    public static void main(String[] args) {
        int num1, num2, total; // init numbers, total variable
        String tmp; // init temp
         
        Scanner sc = new Scanner(System.in);
         
        System.out.print("input number one ");
        tmp = sc.nextLine(); // input num1
        num1 = Integer.parseInt(tmp); // num1 to Integer)
         
        System.out.print("input number two ");
        tmp = sc.nextLine(); // input num2
        num2 = Integer.parseInt(tmp); // num1 to Integer)
         
        total = num1 + num2; // 1+2
         
        System.out.println("one + two = " + total); // result
    }
}

clip_image004

실행결과

2015-05-19: 변수와 상수 더 읽기"

2016-05-18: 주석과 자료형

컴파일 관련 기초적인 실수

시행착오

clip_image001

  • 컴파일: javac filename.java
  • 실행: java filename.class
  • 오류: 오류 : 메인 클래스 JavaEx01.class를 찾을 수 없거나 로드할 수 없습니다(エラー: メイン・クラスJavaEx01.classが見つからなかったかロードできませんでした)

clip_image002

환경 변수 확인

clip_image003

덧: 혹시나 환경 변수 때문에 실행이 제대로 되지 않나 했지만… 큰 관련은 없는 것 같다.

clip_image004

자바 실습

어제에 이어…

1
2
3
4
5
6
7
class JavaEx01 {
    public static void main(String[] args){
        System.out.println("Java!");
        System.out.print("Programming");
        System.out.print(" print");
    }
}

System.out.print : 줄바꿈 없음

주석

comment가 아주 중요. 자바의 주석은 두 가지. // or /**/

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/*
작성자: AAA
일자: 2016-05-18
용도: 테스트
소속사: 00회사
*/
 
class JavaEx01 { //한 줄 주석
    public static void main(String[] args){
        /* 여러 범위 주석
        System.out.println("Java!");
        System.out.print("Programming");
        System.out.print(" print"); */
         
        System.out.println("Age: " + 10);
        // System.out.println("Height: " + 170);
        // 잠깐 실행에서 제외하고 싶을 때 주석을 사용하면 편리하다.
    }
}

변수(Variable)

메모리에 확보한 공간에 붙이는 별칭(Alias)

  1. 변수의 선언

자료형 변수명;

  1. 종류

     

    자료형

    크기(Byte)

    문자

    char

    2

    숫자(정수)

    byte

    1

     

    short

    2

     

    int

    4

     

    long

    8

    숫자(실수)

    float

    4

     

    long

    8

    불린

    Boolean

    1

  2. 사용법
    int score;
    char ch;
  3. 값 대입(초기화)
    변수명 = 상수;

변수: 무엇인가를 기억시키고, 사용할 수 있다는 것.

  • 이러한 방식을 개발함: 폰 노이만

예제

int a=10
int b;
b = a; // a는 상수화되어 b에 저장됨.(등호의 오른쪽에 넣는 순간…)

Address(번지)

  • 0x100 과 같이 표시.
    • 0x로 시작하면 16진수임
    • 이진수로 쓰면 길어지니까.
  • JVM이 변수가 저장될 메모리의 번지를 관리해준다.
    • 변수: 그 번지에 별명을 붙여서 사용

변수명

  • 소문자로 시작
    • 두 단어 이상으로 이뤄졌으면 두 번째 단어를 대문자로

‘Camel 표기법에 의거’ 변수명을 지어보자.

2의 배수

1024

512

256

128

64

32

16

8

4

2

10

9

8

7

6

5

4

3

2

1

 비트/바이트

Bit

Byte

Kilo Byte

Mega Byte

Giga Byte

Tera Byte

Peta Byte

0 or 1

8Bit

1024Byte

1024KB

1024MB

1024GB

1024TB

영문자 1

  • 참고: 숫자 자료형 처리 시 Byte나 Short를 사용한다고 처리 속도가 빠르진 않지만(오히려 int가 빠르게 처리된다고 함) 구식 컴퓨터를 위해 낮은 단위들이 남아 있는 것이라고 한다.
    byte 와 short 는 거의 예비용으로 남겨져 있다.

자료의 저장

  • 1Byte = 8Bit (0~127 저장 가능)
    Byte a;
    a=127;

 

 

 

 

 

 

 

 

MSB(Most Significant Bit, 부호비트)

  • 0이면 양수, 1이면 음수

최상위 비트 (most significant bit, msb)는 최고값을 갖는 비트 위치이다. msb는 가장 큰 숫자를 왼쪽에 기록하는 자리 표기법의 규정 때문에 가끔 “left-most bit”를 뜻하기도 한다.

출처: <https://ko.wikipedia.org/wiki/%EC%B5%9C%EC%83%81%EC%9C%84_%EB%B9%84%ED%8A%B8>

문자(CHAR형)

char -> 2Byte (자바에서는 2바이트임. UNICODE를 지원하기 때문)

ASCII

  • 미국에선 처음 PC를 설계할 때 ASCII를 사용했다.(7비트; 128자)
    • 한글, 한자는 턱없이 부족
    • 영문 윈도우 -> 3달 이후 한글 윈도우

모든 코드를 2바이트로 만들자… 유니코드

유니코드

  • 표현: \u 로 시작하면 유니코드임.(2Byte 기억 공간을 차지, 16비트)
  • 0~65535 표현 가능

A: 65, a: 97일 때 차이는 32.

  • A+32=a
  • a-32=A
  • A+1=B

숫자(int)

별다른 표시가 없는 경우

100 -> int

3.14 -> double

3.14f -> float

  • float 형은 거의 쓸 일이 없음… float형은 오차도 있음…

더 큰 자료들은 별도 클래스로 제공합니다.

지수표기법.

Boolean

Boolean: 1Byte.

참/거짓을 판별하는 용도로 사용.

예제

  • boolean isPower;
  • isPower = true;

문자(String, Char)

String: 문자열 저장. 기본 자료형은 아니지만, 사용의 편의를 위해 만든 클래스라고 함.

String name;

name=”홍길동”;

String name=””; // 백지상태로 clear

전화번호

String tel = “010-0000-0000”; // 전화번호를 String으로 저장

System.out.println(tel); // 출력

참고: C언어에서는 문자열을 배열로 만들어서 번거로움

Char: 한 글자 표기

char ch;

ch = ‘A’; // 작은 따옴표로

char name=’ ‘; // char을 clear하는 경우 한 칸 띄움.(스페이스바를 저장하는 건가?)

실습1

개인 정보를 변수에 저장해 출력하기

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
class JavaEx02 {
    public static void main(String[] args){
        String name, tel, address, email;
        int age;
         
        name="Gil-Dong Hong";
        tel="010-9999-9999";
        address="Seoul, South Korea";
        email="aaaa@bbb.com";
        age=31;
         
        System.out.println("----- " + name + "'s Profile -----");
        System.out.println("Age: " + age);
        System.out.println("Tel: " + tel);
        System.out.println("Address: " + address);
        System.out.println("Email: " + email);
    }
}

clip_image012

실행결과.

Syntax Error(문법 오류)는 찾기 쉬움. 논리적 오류는 구조적인 문제이므로 발견하기 어렵다.

실습2

직급, 기본급 출력

01
02
03
04
05
06
07
08
09
10
11
12
13
14
class JavaEx03 {
    public static void main(String[] args){
        String name, position;
        int basePay;
         
        name="Gildong Hong";
        position="manager";
        basePay=300000000;
         
        System.out.println("----- " + name + "'s Profile -----");
        System.out.println("Position: " + position);
        System.out.println("Base Pay: " + basePay);
    }
}

clip_image013

실행결과

2016-05-18: 주석과 자료형 더 읽기"

2016-05-17: JAVA 프로그래밍 시작

JDK 설치 & 환경 변수 설정

“C:\Users\bs\Downloads\jdk-8u25-windows-x64.exe” 설치

clip_image001[8]

PATH=(기존경로끝에);C:\Program Files\Java\jdk1.8.0_25\bin

clip_image002[4]

CLASSPATH=C:\Program Files\Java\jdk1.8.0_25\lib\tools.jar

(자바에서 제공하는 클래스를 쫙 제공함)

결과

clip_image003[4]

JAVA 실행

clip_image004[4]

Command prompt에서 JAVA 실행 가능해야 함

HelloWorld 작성

clip_image005[4]

첫 소스코드 작성

1
2
3
4
5
class JavaEx01 {
    public static void main(String[] args){
        System.out.println("Java!");
    }
}

clip_image006[4]

주의: System을 소문자로 입력하니 컴파일 오류가 났다.

class JavaEx01 {

  • 클래스 명명 규칙
    • 클래스명은 숫자로 시작 안 됨, 띄어쓰기 불가
    • 첫 글자를 대문자로…
    • 한 단어 이상 구성 시 두 번째 단어의 첫 글자도 대문자로.
      • 보통 두 단어 이상을 조합해 클래스를 만듦.
      • 자바에서 자체적으로 제공하는 기능을 못쓰게 되는 것을 방지.
  • 첫 글자가 대문자이면 99% 클래스임.

public static void main(String[] args){

  • 함수 정의
  • public: 공용, 어디서나
    • 접근제어자
  • static: 정적
  • void: 반환형(돌려주는 값의 형태가 ‘없다’는 뜻)
  • main: 함수명(메소드명)
    • 함수명 뒤에는 반드시 괄호가 나옴. 엑셀처럼.
    • main은 특별
      • 여러 클래스를 합쳐 프로그래밍 하는 경우 단 하나만 main 함수를 가질 수 있음
      • main을 시작점으로 인식
    • 메소드명을 쓸 때 첫글자를 소문자
      • 여러 단어일 때는 두번째 문자가 대문자.
      • 예: printData
  • (String[] args)
    • String[]: 매개변수형, 문자열을 처리 가능하게 만든 클래스임.
      • “”로 묶여진 문자열을 처리
    • args: 매개변수명(변수명)
      • args(Arguments)
      • 마음대로 바꿔써도 됨.
    • 함수를 선언한다는 뜻.

System.out.println(“Java!”);

  • System : 자바의 클래스
  • .out: 하위 패키지(폴더를 생각하면 됨.)
    • 비슷한 역할을 하는 것끼리 모아 놓음: 패키지
  • println(“”) : 함수
    • Console(표준 입출력장치)에 출력
    • 입력: 키보드, 출력: 모니터
    • 출력하는 함수구나!
  • ;
    • 명령문의 끝은 세미콜론으로 끝나야 한다.
    • 세미콜론 이전에는 줄을 바꿔도 됨.

clip_image007[4]

JAVAC로 컴파일

clip_image008[4]

이런 파일이 생성됨.

2016-05-17: JAVA 프로그래밍 시작 더 읽기"