Day02 :) 변수, 데이터타입, 산술연산자

Nux·2021년 8월 31일
0

자바웹개발

목록 보기
2/105
post-thumbnail

프로그램

  • 컴퓨터가 수행할 작업을 순서대로 작성한 작업 지시서.
  • 요리와 비슷하다고 생각 할 것.
  • 김치전 만들기 레시피(메서드)
    • 김치(값, 데이터), 채소(종류, 데이터타입), 김치통(데이터를 담는 그릇, 변수)
      • 재료(데이터)에 따라 담는 그릇이 정해져있음
    • 조리순서(실행 순서)
      • 반죽 재료를 넣는다.
      • 재료를 섞는다.
        ※ 이 각각의 과정이 프로그래밍에서는 '수행문'이 됨
      • 식용유를 두르고 반죽을 얇게 편다.
      • 반죽을 다 쓸 때까지 앞뒤로 노릇하게 부친다.
        ※ 이 반복과정을 프로그래밍에서는 '반복문'이 됨.

변수

변수의 생성

데이터타입  변수이름  =  값;
  • 변수의 이름은 대소문자를 구별함.
  • 변수의 이름은 숫자로 시작 할 수 없음.
  • 타입이 다르더라도 동일한 이름은 생성 불가.
    int a;
    long a;
    ->불가능

변수의 사용

  • 초기화: 변수에 값을 저장하는 것.
  • 변수 사용을 위해서는 초기화가 필요함.
  • 변수 사용시에는 타입 명시할 필요 없음.
int a = 3; ->초기화
System.out.println(a); -> 타입 명시 없이 이름만으로 사용 가능
  • 변수는 연산에 참여한 데이터 타입과 동일한 타입이 나옴.
1. 
int a = 3; int b = 10;
a/b = 0(정수)

2.
double x = 3.0; double y = 10.0;
x/y = 0.3(실수)

변수 값 변경

데이터 타입

  • 정의: 예약어 중 하나로, 변수의 종류를 나타냄.

유의사항

  • 각 타입이 표현 할 수 있는 범위를 벗어난 데이터 저장 시, 에러 발생
    • 오버플로우: 최대 표현범위보다 큰 수를 저장할 때 발생
    • 언더플로우: 최소 표현범위보다 작은 수를 저장 할 때 발생

정수형

  • 자바의 기본 정수형 타입은 int(+-21억)으로 정의되어 있어서,
    long으로 선언해도 int 범위를 벗어날 시 인식하지 못함.
100억으로 변수 정의 시,
long x = 10000000000;(인식 불가)
long y = 10000000000L;(long으로 인식)

따라서 값 뒤에 'L'혹은 'l'을 붙여 long임을 인식시켜야 함.

  • 정수값을 표현하는 방법
int a = 1000; 
int b = 100_000; -> 100,000
int c = 012; ->1X8^1 + 2X8^0 = 8+2 = 10(8진수)
int d = 0x12; -> 1X16^1+2X16^0 = 16+2 = 18(12진수)

실수형

  • 부동소수점 방식이므로 아주 정확히 표현하지 못하고 가장 근접값을 이용함.
double x = 0.1; double y = 0.2;
double z = x+y;
이때 z의 값은 0.300000....04가 출력 됨.
  • 돈 계산 등 정확한계산이 필요할 때에는 int나 long을 이용하거나,
    소수점을 없앤 후 사용
double x = 0.1; double y = 0.2;
double z = (x*10)+(y*10)/10;
0.3으로 정상 출력
  • 기본 실수형 타입이 double로 설정 되어 있어, float이용시에는
    정수형과 마찬가지로 값 뒤에 'F'나'f'를 붙여 float임을 인식시켜야 함.
float a = 1.0F;
flaot b = 3.14f;

문자형과 문자열

문자형

  • 문자 한 글자를 표현하는 데이터 타입. 기본자료형.
char a = 'A';
char b = 65; ->아스키 코드표에서 65번째 문자 'A'를 출력
char c = '\u0041'; -> 유니코드의 0X0041번째 문자 'A'를 출력
char d = 'AA'; -> 두 글자 이상 출력 불가
char e = ''; -> 빈 문자 저장 불가
char f = ' '; -> 공백 한칸 출력 가능.

문자열

  • 리터럴 타입. 다른 기본형 타입과 다르게 예약어가 아님. 참조자료형.
String a = ""; -> 빈문자 가능
String b = "A"; -> 한글자 가능
String c = "안녕하세요"; -> 여러글자 가능
String d = "    "; -> 많은 공백 가능
String e = "하이 하이루"; -> 공백 포함한 여러글자 가능
String f = ''; -> ''는 char에만 쓰일 수 있으므로 불가
String g = "60"; -> 숫자 가능(문자 취급)
  • 기능 몇가지
    • 글자 대체: 변수이름.replace("바꾸려는 문자","바꿀 문자)
       String a = "안녕하세요";
       System.out.println(a.replace("안녕","하이"))
       하이하세요가 출력 됨.
    • 글자수세기: 변수이름.length()
      String a = "안녕하세요";
      System.out.println(a.length())
      안녕하세요 글자수 5가 출력 됨.

문자형과 문자열의 차이

  • 문자형: 기본자료형으로, 변수에 바로 값을 저장함.
  • 문자열: 참조자료형으로, 변수에 주소값이 저장되어 있음.
    ※ 다양한 기능을 매번 구현해 내는것이 번거로우므로,
    이 기능이 이미 구현되어있는 통에 넣는다고 생각할 것.

형 변환

자동 형변환

  • 크기가 작은 타입->크기가 큰 타입.
  • 정밀도가 낮은 타입->정밀도가 큰 타입.(정수->실수)
int a = 100;
long b = a;
float c = a;
double d = a;
long, float, double은 int보다 크기가 더 큰 자료형.
따라서 자동형변환 발생.
3/10 = 3 -> 같은 정수/정수이므로 형변환X
3.0/10 = 3.3333... -> 정수보다 실수가 크므로 정수->실수로 자동 형변환되어 계산.
3/10.0 = 3.3333... -> 상동.
3.0/10.0 = 3.3333..-> 같은 실수/실수이므로 형변환X

수동 형변환

  • 크기가 큰 타입->크기가 작은 타입.
  • 정밀도가 큰 타입->정밀도가 낮은 타입.
  • 형변환 과정 중 데이터 손실이 일어나므로, 개발자가 직접 형변환을 해주어야 함.
  • 형변환할타입 변수이름 = (형변환할타입) 형변환할변수;
double a = 3.14;
int b = (int)a;->정수인 int에 맞춰 3으로 형변환 됨.
int x = (int)10000000000L;(백억)
->int의 범위(+-21억)을 초과한 값이므로 오류.

자동/수동 형변환 혼합

int a = 3; int b = 250;
double a1 = a/b; -> 250/3 -> 83 -자동형변환(double)-> 83.0
double a2 = (double) (a/b); -> 250/3 -> 83 -수동형변환-> 83.0 
double a3 = (double) a/b; -> 250(수동형변환)/3 -> 250.0/3(자동형변환) -> 250.0/3.0 -> 83.333...
double a4 = a/(double)b; -> 250/3(수동형변환) -> 250(자동형변환)/3.0 -> 250.0/3.0 -> 83.333...

문자의 형변환

  • 문자와 정수간 형변환만 가능
char a = 65; ->아스키코드 65번째 문자인 'A' 출력.
int b = 'B'; ->아스키코드 문자 B의 순번인 '66'출력.
  • 문자열과 숫자간의 형변환은 불가
int x = (int)"1234"; ->불가
String y = (String)1234; ->불가

연산자 1

산술연산자

  • 사칙연산+나머지 계산을 수행하는 연산자(+ - * / %)
문자와 숫자에서 +연산자 응용하기
1. 숫자+숫자		덧셈 3+5=7
2. 숫자+문자열		이어붙이기 3+"안녕"=3안녕
3. 문자열+숫자		이어붙이기 "안녕"+3+1=안녕31
4. 문자열+문자열		이어붙이기 "안녕"+"하세요"=안녕하세요
5. 문자열+(숫자+숫자)	괄호 계산 후 이어붙이기 "안녕"+(3+1)=안녕4

0개의 댓글