[자바] java 기초

01. 자바 프로그래밍 시작하기

프로그래밍 이란?

  • 프로그래밍: 컴퓨터가 일을 수행 하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일

  • 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가는한 기계어로 만드는 일

  • 컴파일러 : 기계어로 바꾸어 주는 프로그램 ( ex. 자바 컴파일러, gcc )

자바 프로그래밍

  • 자바의 역사 : 1991년 제임스 고슬링을 비롯한 선 마이크로 시스템스 연구원들이 처음 개발 가전, 휴대용 장치에 사용되는 소프트웨어 언어로 개발됨. 안정성이 중요

  • 자바 프로그래밍의 특징

    • 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다.

vm

  • 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.

  • 프로그램이 안정적이다.

  • 풍부한 기능이 제공되는 오픈 소스이다.

객체 지향 프로그래밍이 무엇인가?

  • 프로그램의 구현을 시간의 흐름순이 아닌 객체간의 관계와 협력을 기반으로 프로그램 하는 것

  • Object oriented programming(OOP) 이라고 함 ( cf. 절차 지향 프로그래밍 proedural programming )

  • 사용 하는 언어 : Java, C++, C#, Python, JavaScript, Ruby 등 다수

자바로 프로그래밍을 하면 좋은 이유는 뭔가요? (객체 지향 프로그래밍의 장점)

usejava

자바를 활용한 프로그래밍

  • 웹 서버 구현

  • 안드로이드 프로그래밍

  • 게임 프로그래밍

이 과정에서 배워야 할 내용

  • 자바 언어 익히기 (문법)

  • 객체 지향 프로그래밍 개념을 익히고 자바로 구현하기

  • 자료 구조의 필요성을 이해하고 구현하기

  • 자바 언어의 정확한 이해를 통한 문제 해결하기(객체지향, 알고리즘 문제 등)

용어 정리

JDK(Java Development Kit) : 자바에서 제공되는 개발용 라이브러리. 계속 버젼이 올라가고 있음
JRE(Java Runtime Environment) : 자바 프로그램이 실행되는 환경. 8.0까지 무료로 제공 됨
JVM(Java Virtual Machine) : 자바 가상 머신으로 프로그램이 실행되는 환경인 JRE 가 설치되어 있어야 함 ----

02. 자바와 이클립스 설치하기

1. 자바 설치 하기

자바 JDK 설치

자바 JRE 설치

자바는 유료화 이후 JRE는 8.0까지만 무료 제공

2. 이클립스 설치 하기

이클립스 설치

이클립스는 지속적으로 업그레이드 됨


03. 자바 첫 프로그램 만들고 실행하기

첫 프로그램 “Hello, Java” 출력하기

package ch01;

public class HelloJava {

	public static void main(String[] args) {
		System.out.println("Hello, Java");
	}
}

04. 컴퓨터에서 자료 표현하기

2진수로 표현

0과 1로만 데이터를 저장함
bit(1비트) : 컴퓨터가 표현하는 데이터의 최소 단위로 2진수 하나의 값을 저장할 수 있는 메모리의 크기
byte(바이트) : 1byte = 8bit

2진수와 10진수

binary

2진수와 8진수 16진수

binary2

8비트로 5를 표현해 보면…

8bit

비트로 나타낼 수 있는 수의 범위는?

한 개의 비트로 나타낼 수 있는 수 : 0. 1 (2개)
두 개의 비트로 나타낼 수 있는 수 : 00, 01, 10, 11 (4개)
세 개의 비트로 나타낼 수 있는 수 : 000, 001, 010, 011, 100, 101, 110, 111 (8개)

2진수, 8진수, 16진수를 프로그램에서 사용하는 예제

package ch04;

public class BinaryTest {

	public static void main(String[] args) {
		int num = 10;
		int bNum = 0B1010;
		int oNum = 012;
		int xNum = 0XA;


		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(xNum);
	}
}

05. 변수(Variable)는 변하는 수입니다.

변수는 언제 쓰나요?

  • 프로그램에서는 항상 변하는 값을 나타낼 필요가 있음 ( ex. 학생의 성적, 합계, 게임의 레벨, 회원 주소 등등…)

  • 표현하려는 수에 맞는 데이타 타입(자료형)을 이용하여 변수를 선언

  • 표현하려는 자료가 숫자, 문자, 문자열등 다양할 수 있으므로 그에 맞는 자료형을 사용

변수 선언과 사용하기 예제

변수 선언은 자료형과 변수 명으로 선언함 선언과 동시에 초기화 할 수 있음

package ch05;

public class VariableTest {

	public static void main(String[] args) {
		int age, count;
		age = 10;

		int level = 10000;
		System.out.println(age);
		System.out.println(level);
	}
}

변수의 이름 만들 때…

변수 이름은 영문자(대문자, 소문자)나 숫자를 사용할 수도 있고, 특수문자 중에는 $와 _만 사용 (ex. count100, _master)

변수 이름의 시작은 숫자로 할 수 없음 ( ex. 27days(X), 1abc(X))

자바에서 이미 사용하고 있는 예약어는 사용할 수 없음 (while, break 등)

변수 이름은 프로그램내에서 사용되는 것이므로 그 용도에 맞고 가독성이 좋게 만드는것이 중요
ex) int numberOfStudent;

06. 자료형(data type) - 정수는 어떻게 표현하나요?

변수와 메모리

변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당
변수는 할당된 메모리를 가리키는 이름

int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨

기본 자료형(primitive data type)의 종류

intdatatype

정수 자료형의 종류와 크기

intdatatype2

byte와 short

  • byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용

  • short: 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용

int

  • 자바에서 사용하는 정수에 대한 기본 자료 형

  • 4바이트 단위의 자료형

  • 프로그램에서 사용하는 모든 숫자(리터럴)은 int 로 저장됨

  • 32 비트를 초과하는 숫자는 long 자료형으로 처리

long

  • 8바이트 자료형

  • 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함

  • 예) int num = 12345678900; // 오류
    long lnum = 12345678900; //오류
    long lnumber = 12345678900L; // ok


07. 자료형(data type) - 실수는 어떻게 표현하나요?

- 부동 소수점 방식

  • 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함

  • 부동 소수점 방식으로 실수 값 0.1 표현 realnum

  • 지수부와 가수부로 표현 함

  • 컴퓨터에서는 밑수를 2로 사용

  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것

  • 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임
    예) 0.2 표현 0.4 X 2-1 정규화 하면 1.6 X 2-3

- float형과 double형

float

자바에서는 실수의 기본 타입은 dobule을 사용 함

- float 와 double 예제

   package ch07;

   public class DoubleTest {

	   public static void main(String[] args) {
		   double dnum = 3.14;
		   float fnum = 3.14F;

		   System.out.println(dnum);
		   System.out.println(fnum);
	   }
   }

- 부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다

   public class DoubleTest2 {

	public static void main(String[] args) {

		double dnum = 1;

		for(int i = 0; i<10000; i++) {
			dnum = dnum + 0.1;
		}
		System.out.println(dnum);
	}
}

출력 결과

output


08. 자료형(data type) - 문자는 프로그램에서 어떻게 표현하여 사용하나요?

- 문자도 정수로 표현합니다.

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의
  • A 는 65

encode

  • 문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함
    (ex. ASKII, euc-kr, utf-8, utf-16)

- 자바에서는 문자가 어떻게 표현되나요?

  • 자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용

  • utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)

- 문자형 변수 선언과 사용하기

  • 문자를 위한 데이터 타입 char ch = ‘A’;

  • 내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음

    char ch2 = 66;

package ch08;

public class CharacterTest {

	public static void main(String[] args) {

		char ch1 = 'A';
		System.out.println(ch1);
		System.out.println((int)ch1);

		char ch2 = 66;
		System.out.println(ch2);

		int ch3 = 67;
		System.out.println(ch3);
		System.out.println((char)ch3);

		//char ch4 = -66;  음수는 대입 할 수 없음

    		char ch5 = '한';
		char ch6 = '\uD55C';

		System.out.println(ch5);
		System.out.println(ch6);
	}
}

참고하세요

character set: 문자를 숫자로 변환한 값의 세트

encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것

ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트

UNICODE: 전 세계 표준으로 만든 문자 세트

UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음

UTF-16: 2바이트로 문자를 표현

한글 유니코드 표


09. 자료형(data type)- 논리형과 자료형 없이 변수 사용하기

논리형

  • true(참), false(거짓) 두 가지만 나타냄

  • 1바이트를 사용 함

  • 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지등을 표현

package ch09;

public class BooleanTest {

	public static void main(String[] args) {

		boolean isMarried = true;
		System.out.println(isMarried);
	}
}

지역 변수 자료형 없이 사용하기 ( 자바 10 지원 됨 )

  • Local variable type inference

  • 추론 가능한 변수에 대한 자료형을 선언하지 않음

  • 한번 선언하여 추론 된 변수는 다른 타입의 값을 대입 할 수 없음

  • 지역 변수만 사용 가능

 package ch09;

public class LocalVariableType {

	public static void main(String[] args) {

		var i = 10;
		var j = 10.0;
		var str = "hello";

		System.out.println(i);
		System.out.println(j);
		System.out.println(str);

		str = "test";
		//str = 3;
	}
}

10. 변하지 않는 상수와 리터럴, 변수의 형 변환

상수(constant) 선언하기

  • 상수는 변하지 않는 수

  • 원주률 3.14, 1년 12개월 등

  • final 예약어를 사용하여 선언

  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고
    혹, 변하더라도 선언한 부분만 변경하면 되므로 여러부분을 수정할 필요가 없음

package ch10;

public class ConstantTest {

	public static void main(String[] args) {

		final int MAX_NUM = 100;
		final int MIN_NUM;

		MIN_NUM = 0;

		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);

		//MAX_NUM = 1000;
	}
}

리터럴(literal)

  • 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻함

  • 리터럴은 상수 풀(constant pool)에 있음

  • 정수 리터럴은 int 로 실수 리터럴은 double 로 저장됨
    정수의 범위가 넘어가는 경우는 L,l을 float로 사용하려는 경우는 F,f 식별자를 써줘야 함

형 변환 (type conversion)

  • 서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 통일하는 것

  • 묵시적 형 변환(explicit type conversion, 자동 형 변환)과 명시적 형 변환(implicit type conversion, 강제 형 변환)이 있음

  • 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어 짐

  • 덜 정밀한 자료형에서 더 정밀한 자료형으로읜 형 변환은 자동으로 이루어 짐

conversion

byte bNum = 10;
int iNum = bNum;  

int iNum1 = 20;
float fNum = iNum2;

int iNum = 10;
byte bNum = (byte)iNum;

double dNum = 3.14;
int iNum2 = (int)dNum;

연산 중 형 변환 예제

package ch10;

public class TypeConversion {

	public static void main(String[] args) {

		double dNum = 1.2;
		float fNum = 0.9F;

		int iNum1 = (int)dNum + (int)fNum;
		int iNum2 = (int)(dNum + fNum);

		System.out.println(iNum1);
		System.out.println(iNum2);
	}

}






© 2021.03. by yacho

Powered by github