Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

Java 1장(with 자바의 정석) 본문

Java

Java 1장(with 자바의 정석)

H.S-Backend 2024. 4. 3. 14:06
자바(Java)란 ?
프로그래밍 언어 (Programing language)
컴퓨터 프로그램(애플리케이션)을 만드는데 사용한다

  • 실행환경(JRE) + 개발도구(JDK) + 라이브러리(API)
  • 라이브러리를 사용하면 쉽고 빠르게 어플리케이션 개발이 가능하다

자바 사용하는 곳
  1. PC 어플리케이션 개발 프로그램 (InteliJ, eclipse 등)
  2. 웹 애플리케이션 개발 프로그램 (Spring boot, 등)
  3. 모바일 어플리케이션(안드로이드) (Android)
  4. 빅 데이터(Big Data) (hadoop)
  5. 게임(마인 크래프트), 과학, 소형기기 
자바는 원래 소형기기에 사용되려고 만들어졌다.

자바를 사용하는 이유
  1. 다양한 분야에서 활발히 사용된다. (안쓰이는 분야가 없다)
  2. 배우기 쉽고 학습자료가 풍부하다
  3. 모던 프로그래밍 언어(객체지향+ 함수형이 추가되었다)
  4. 최근에 나온 언어들 보다 못지않게 발전하고있다.
  5. 취업에 유리하다.(실무에서 제일 많이 사용한다)
출처 : https://www.tiobe.com/tiobe-index/

자바의 역사
  1. 1996년에 첫 개발 JDK(자바 개발자 도구) 1.0
  2. 1998년에 J2SE 1.2 업데이트  J2SE, J2ME,J2EE
  3. 2004년에 5.0 or 1.5 업데이트
  4. 2014년 Java SE 8 업데이트
  5. 2014년 부터 6개월마다 버전 업그레이드 발표를 하고있다.
안정성으로 인하여 개발을 신중히 검토하였으나 최신기능들을 반영하기 위하여 6개월마다 하는것이다.

 

자바의 특징
  • 배우기 쉬운 객체지향 언어이다.(기존의 프로그래밍 언어+객체지향을 도입)
  • C++, Java,Python, Javascript 다 객체지향이다.
  • 객제지향이란 하나의 언어를 이해하면 다른 객체지향 언어를 배우기 쉽다.
  • 자동으로 메모리 관리를 해준다. (Garbage Collector가 자동으로 해준다.)
  • 프로그램 작성이 편리하다.
  • 멀티쓰레드를 지원한다.(멀티쓰레드 = 여러개의 작업을 하게 해준다)
  • 풍부한 라이브러리쉽게 개발 가능하다.(자바가 제공하는 라이브러리는 자료가 풍부해서 쉽고 빠르게  할 수 있다)
  • 운영체제에 독립적이다.
자바 가상 머신 (JVM)
  • 자바 프로그램이 실행되는 가상 컴퓨터(VM)
  • 한번 작성하면, 어디서든 실행이 가능하다(Wirte once, run anywhere)

변수(Variable)란

하나의 값을 저장할 수 있는기억공간

 

변수의 타입(Data Type)

값 -문자 - char
    - 숫자 - 정수 - byte, short, int, long
               - 실수 - float, double
   
논리 - boolean

 

기본형(Primitive Type)
  • boolean, char, byte, short, int, long, float, double = 8개
  • 실제 값을 저장한다
참조형(Reference Type)
  • 기본형 8개를 제외한 나머지 String, System 등
  • 객체의 주소를 저장한다 4byte, 0x00000000~0xffffffff
64bit JVM의 경우 참조형의 크기는 8byte 이다
기본형 (Primitive type)

  논리형(boolean) - true와 false 중 하나를 값으로 갖고 조건식과 논리적 계산에 사용된다.
  문자형(char) - 문자를 저장하는데 사용되며 변수 당 하나의 문자만을 저장할 수 있다. (여러문자는 String)
  정수형 - 정수 값을 저장하는데 사용되며 주로사용하는 것은 int와 long(아주 큰 정수)이다.
                byte는 이진데이터를 다루는데 사용되며 short은 c언어와의 호환을 위해 추가 되었다.(많이 쓰이지는 않는다)
  실수형 - 실수 값을 저장하는데 사용된다. float와 double이 있다.

 1byte2byte4byte8bye
논리형boolean
(true, false)
   
문자형 char
(유니코드)
  
정수형byteshortintlong
실수형  float
(부동소수점)
double
(정밀도가 2배)
1bit = 2진수 1자리
1byte = 8bit
부동 = 떠다니다. 

 

기본형(Primitive type) - 표현범위1
  1. byte b = 1byte = 1bit 8개 = 1bit는 2진수 한자리(0,1)값을 저장할 수 있다.
  2. b = 3; 이라면 1byte 오른차수 부터 11이 저장된다.(2진수로 11)
n비트로 표현할 수 있는 값의 갯수 =  2ⁿ 
n비트로 표현할 수 있는 부호없는 정수(양수 1~ 2ⁿ)의 범위 =  0~ 2ⁿ -1
n비트로 표현할 수 있는 부호있는 정수 = - 2ⁿ-¹ ~  - 2ⁿ-¹ - 1
기본형(Primitive type) - 표현범위2
  • 1byte = 8bit = -128 ~ 127
  • short = 2byte = 16bit = -32768~32767 (부호있는 정수 이기에 -부터 시작한다)
  • char = 2byte =16bit = 0~65535 
  • short type과 달리 모두 양수값으로 사용할 수 있다. (부호 없는 정수)
  • int = 4byte =32bit = -20억 ~ 20억
  • long = 8byte= 64bit = -800경 ~ 800경
  • long 보다 큰경우 Biginteger class를 사용하면된다.

 

기본형(Primitive type) - 표현범위3
자료형저장 가능한 값의 범위정밀도
(오차없는 자리수를 뜻한다)
bitbyte
float1.4E-45~3.4E38
(양수만 표현한 범위)
7자리324
double(default type4.9E-324~1.8E30815자리648
E는 10의 몇제곱을 나타내기 위한 기호

 

변수의 선언방법
타입 변수명
int score; 
score = 100;
int score = 100;
String str = new String("abc");
          str = null;

 

명명 규칙 (Naming convention)

대소문자가 구분되며 길이에 제한이 없다.
  • True와 true는 서로 다르다.(대, 소문자)
예약어 (Reserved word)를 사용해서는 안된다.
  • true는 예약어라 사용할 수 없지만 True는 가능하다
숫자로 시작해서는 안 된다.
  • top10은 허용하지만 7up은 허용되지 않는다
특수문자는 '_'와 '$'만을 허용한다
  • $harp은 허용되지만 S$arp는 허용되지 않는다.

권장사항

클래스 이름의 첫 글자는 항상 대문자로 한다.
  • 변수와 메소드 이름의 첫글자항상 소문자로 한다
여러단어 이름은 단어의 첫 글자를 대문자로 한다.
  • lastIdexOf, Stringbuffer
상수의 이름은 대문자로 한다. 단어는'_'로 구분한다
  • PL MAX_NUMBER
변수, 상수, 리터럴
  • 변수(variable) - 하나의 값을 저장하기 위한 공간
  • 상수(constant) - 한 번만 값을 저장할 수 있는 공간
  • 리터럴(literal) - 그 자체로 값을 의미하는 것
 int score = 100;
       score = 200;
char ch = 'A';
String str = "abc";
final int MAX = 100;
MAX = 200; // 에러. 상수의 값은 변경이 불가능하다.

 

리터럴과 접미사
리터럴(데이터)접미사(꼬리)리터럴(데이터)접미사(꼬리)
boolean powertrue;  ling l100000000000L;
char ch'A' float f3.14f
char ch'\u0041';  double d3.14d
char tab'\t';  float f100f;
byte b127;10.10.0
short s32767;  .100.10
int i     100;      10f10.0f
int oct0100; 3.14e3f3140.0f
int hex0x100;lel 10.0

 


형식화된 출력 - Printf()

Println()의 단점 - 출력형식을 지정 불가능하다.

실수의 자리수 조절이 불가능하다 
소수점 n자리만 출력하는게 불가능하다.
  • System.out.pritnln(10.0/3); = //3.3333333333...
10진수로만 출력된다 
  • System.out.println(0x1A); // 26
Printf()로 출력형식 지정가능하다
  • System.out.printf("%.2f", 10.0/3); //3.33 (소수점 둘째자리까지 출력)
  • System.out.printf('%d', 0x1A); //26  (10진수로 출력)
  • System.out.printf("%X", 0x1A); //1A (16진수로 출력)

 printf()의 지시자

지시자설명
%b불리언(boolean)형식으로 출력
%d(정수)10진(decimal) 정수의 형식으로 출력
%o(정수)8진(octal) 정수의 형식으로 출력
%x, %X(정수)16진(hexa-decimal) 정수의 형식으로 출력
%f(실수)부동 소수점(floating-point)의 형식으로 출력
%e, %E(실수)지수(exponent) 표현식의 형식으로 출력
%c(문자)문자(character)로 출력
%s(문자)문자열(string)로 출력
Ex) System.out.printf("age:%d year:%\n", 14, 2017); // "age:14 year:2017\n"이 화면에 출력된다.

 

\n(%n) = 개행문자 = 줄바꿈역할을 한다.

  • System.out.printf("age:%d", age); //출력 후 줄바꿈을 하지 않는다. = %n 이 없다
  • System.out.printf("age:%d%n", age); //출력 후 줄바꿈을 한다. = %n이 있다.

 


정수를 10진수, 8진수, 16진수로 출력한다
  • System.out.printf("%d", 15); // 15 = 10진수= decimal = %d
  • System.out.printf("%o", 15); // 17= 8  = 8진수= octor = %o
  • System.out.printf("%x", 15); // f  = 16진수 = hexa =%x
  • System.out.printf("%s", Integer.toBinaryString(15)); // 1111= 2진수 = %s
toBinaryString=정수를 2진문자열로 변환해준다

8진수(0)와 16진수(0x)에 접두사 붙이기 -> 지시자 앞에 #을 붙이면된다
  • System.out.printf("%#o", 15); // 017 
  • System.out.printf("%#x", 15); // 0xf
  • System.out.printf("%#X", 15); // 0XF
실수 출력을 위한 지시자 %f - 지수형식(%e), 간략한 형식(%g)
  • float f = 123.4567890f;
  • System.out.printf("%f", f); // 123.456787 =소수점아래 6자리까지 출력 (끝자리 2자리는 의미없는 숫자)
  • System.out.printf("%e", f); // 1.234568e + 02 지수형식으로 출력(마지막 숫자 8 은 반올림되어 보여줘서 8이다)
float 보단 double 의 정밀도가 더 높다. (15자리 이기때문에)
  • System.out.printf("%g", 123.456789); // 123.457 = 7자리 까지 출력 (마지막 숫자는 반올림)
  • System.out.printf("%g", 0.000000001); // 1.00000e-8 
실수 지시자 %f, 지수는 %e 를 쓰면된다.

  • System.out.printf("[%5d]%n", 10); // [xxx10] (오른쪽 정령)
  • System.out.printf("[%-5d]%n", 10); // [10xxx] (왼쪽 정렬)
  • System.out.printf("[%05d]%n", 10); //[00010]

 

%전체자리. 소수점 아래자리는 f
  • System.out.printf("d=%14.10f%n", d); //전체 14자리 중 소수점 아래 10자
  • System.out.printf("[%s]%n",      url) ; // [www.xxx.com]
  • System.out.printf("[%20s]%n",    url); // [     www.xxxx.com]   = 왼쪽 공백
  • System.out.printf("[%-20s]%n",      url); // [www.xxx.com     ]  = 오른쪽공백
  • System.out.printf("[%.8s]%n" ,       url); //[www.xxx]   = 8자리만 출력

화면에서 입력받기

Scanner란

화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

Scanner 사용

import문 추가
  • import java.util.*;
Scanner객체의 생성
  • Scanner scanner = new Scanner(System.in); //System.in 은 화면입력
Scanner 객체를 사용
  • int num = scanner.nextInt(); // 화면에서 입력받은 정수를 num에 저장한다.
  • String input = scanner.nextLine(); // 화면에서 입력받은 내용을 input에 저장한다
  • int num =Integer.parseInt(input); //문자열(input)을 숫자(num)로 변환한다.

계수기(counter = 숫자를 센다)는 숫자를 세는 기계

 

오버플로우(over flow) : 표현가능한 범위를 넘는 것
  • 최대값 + 1 -> 오버플로우가 발생하여 최소값이 나온다. -> 9999+1 = 0000 = 2진수 1111+1 = 0000
  • 최소값 = 1 -> 오버플로우가 발생하여 최대값이 나온다. -> 0000-1 = 9999 = 2진수 0000-1 = 1111

 

부호없는 정수 4bit의 경우 표현범위가 0~15이므로 이값이 계속 반복되고
부호있는 정수 (4bit)의 경우 표현범위가 -8~7이므로 이 값이 무한히 반복된다.
부호없는정수  15+1 -> 0
                          0-1 -> 15
부호있는정수   7+1 -> -8
                          -8-1 -> 7

 

  • sMin - 1 -> sMax (32767) // 최소값 - 1 -> 최대값
  • sMax +1 -> sMin(-32768) // 최대값 + 1 -> 최소값
  • cMin - 1 -> cMax(65535) // 최소값 -1 -> 최대값
  • cMax + 1 -> cMin(0) // 최대값 + 1 -> 최소값
10진수 (0,1,2,3,4,5,6,7,8,9) = 0~10-1 
  1. 0~ 9  = 0~10-1
  2. 00 ~ 99 = 0~10² -1
  3. 000 ~ 999 = 0~10³ -1
  4. 0000~9999 = 0~ 10⁴ -1
2진수
  1. 0~1 =  0~1 -> 0~2-1
  2. 00 ~ 11 = 0~3 -> 0~2² -1
  3. 000~111 =  0~7 -> 0~2³-1
  4. 0000~1111 = 0~2⁴-1
16비트로 표현할 수 있는 정수의 개수 : 65536개 
부호있는 정수 short 타입의 표현범위 : -32768~32767
부호없는 정수 char 타입의 표현범위 : 0 ~ 65535

타입간의 변환방법

문자와 숫자간의 변환
  • 숫자 3 + '0' -> 문자 3
  • 문자 3 - '0'-> 숫자 3
문자열로의 변환
  • 3 + " " -> "3"
  • '3' + " " -> "3"
문자열을 숫자로 변환
  • "3" Integer.parseInt = 숫자 3
  • "3.4" double.parseDouble = 숫자 3.4
문자열을 문자로 변환
  • "3" charAt(ø) = '3'

 

반응형