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쪽

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 입력 받고 출력하기

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 이름과 나이 입력받아 출력하기

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 두 개의 숫자를 입력 받아 출력

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

실행결과

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

컴파일 관련 기초적인 실수

시행착오

clip_image001

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

clip_image002

환경 변수 확인

clip_image003

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

clip_image004

자바 실습

어제에 이어…

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 /**/

/*
작성자: 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

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

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

직급, 기본급 출력

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-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]

첫 소스코드 작성

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]

이런 파일이 생성됨.

SyntaxHighlighter Evolved: 코드 하이라이트 플러그인 설치

SyntaxHighlighter Evolved: https://ko.wordpress.org/plugins/syntaxhighlighter/

Java Code

// 화면으로 출력을 실행하는 프로그램
public class Hello {
    public static void main(String[] args){
        System.out.println("처음 작성하는 Java 프로그램.");
        System.out.println("화면으로 출력하고 있습니다.");
    }
}

C++ Code. 강조 및 제목 삽입. cpp title=”제목” highlight=”1-3,6,9″ 이런 식으로 입력.

#include <iostream>
using namespace std;
/* 구조체 선언 */
struct person {
	char name[20];
	char address[70];
	int age;
};
void main(){
	struct person employee;
	cout << "Please enter your name: \n";
	cin >> employee.name;
	cout << "당신의 주소를 입력하세요: \n";
	cin >> employee.address;
	cout << "Please enter your age\n";
	cin >> employee.age;
	cout << "당신의 이름은 " << employee.name << "이고,\n";
	cout << "당신의 address는 " << employee.address << "이고, \n";
	cout << "당신의 age는 " << employee.age << "입니다. \n";
}