-
(국비교육) 3 - 변수와 자료형개발/국비교육 2023. 6. 2. 17:56
■ 편리한 기능
1. 이클립스 작업표시줄 고정하여 지속 사용
2. .java 파일 모두 닫기 위해서는 오른쪽 버튼 클릭 후 "Close All" 클릭
■ 메인메소드 기본 구조
■ 변수
- 변수: 변하는 수 <-> 상수 : 변하지 않는 수(불변) ex)파이
- 변수는 프로그램이 진행할 때 중간의 값을 저장해두기 위한 공간
- 데이터 타입 변수이름; = 변수선언
ex) int number;
- 값 대입
ex) number = 100
- 대입 : 오른쪽의 값을 왼쪽에 넣다. (=)
같다의 의미랑 다르며, 같다는 " == " 이다.
ex) 1 + 2 == 3
- 변수 선언 + 값 대입 == 변수 초기화
ex) int num = 101;
- 리터럴 = 고정된 값
- 실수형 타입
ex) double num1 = 1.000009;
- 문자열 타입 ("")
ex) String num2 = "Hello";
- 실수형 타입
ex) int num3 = 10;
- 대입 기호 기준으로 양 변의 테이터 타입이 동일해야 대입
ex) int num3= num;
※ num 이 정수형이기 때문에 num3도 int 타입이기 때문에 에러x
- 형변환 = 데이터타입 변환
ex) num3 = (int) 10.33333;
※ num3 이 정수형이기 때문에 (int)를 붙여 10.3333 을 형변환 시킨다.
이를 위해 cast( = 값의 절삭)를 사용하면 되나, 값을 잃을 수 있다.
System.out.println(num3); 했을 경우 값은 10.33333 이 아닌 10 이 나온다.
- 자동 대입 = 프로모션
ex)
int iNumber = 14;
double dNumber = iNumber;
※ 왼쪽변이 실수이고 오른쪽은 정수형으로 왼쪽이 더 큰타입이라 int가 자동 대입됩니다.값은 실수를 따라 14.0 으로 나온다.
* 변수는 우리가 이미 익숙하게 사용하고 있는 개념입니다.
* 예를 들어 하나의 연삭식이 있을 떄
* 1 + 2 = 3
* 3 + 3 = 6
* 8 - 5 = 3
* 변수를 사용하는 주 목적은 같은 타입(type)의 값이 프로그램 실행시에
자주 변경되어야 할 때 이를 변수에 담아서 활용하기 위함
■ 변수 선언(초기화) 규칙 (꼭 기억)1. 변수는 특정 블럭 {} 내부에 어디서건 선언 가능합니다.
만약 메소드 바디 내부에서 선언 = 지역 local 변수
클래스 바디에서 선언되어지면 = 인스턴스 instance 변수
(인스턴스 변수는 나중에 객체지향시간에 배울 예정)
2. 변수가 처음 선언될 때 반드시 변수의 좌측에
변수타입(type) 일명 데이터 타입이 선언되어야 합니다.
3. 변수는 한번 선언되면 그 변수를 포함하고 있는 블럭 내에선
절대 재선언이 불가능 합니다.
4. 같은 타입의 변수는 한 라인에 ; 없이 계속 선언 가능각 변수는 , 로 구분하며 마지막에 ; 를 붙입니다.
5. 지역변수는 반드시 사용 전에 초기화 되어야 합니다.
■ 이름 만들기 (변수명, 클래스명, 메소드명, 상수명)
1. 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
단 숫자는 이름 첫머리에 올 수 없습니다.
2. 클래스 이름 : 위 사용 가능한 문자를 조합합니다.
반드시 첫글자는 대문자이어야 합니다.
한 단어 이상의 단어들의 조합일 때는 새로운 단어
첫머리글자를 대문자로 합니다. = 파스칼 표기법3. 메소드명, 변수명 : 사용가능한 문자를 조합합니다.
첫 글자는 소문자로 시작합니다.
두 단어의 결합이라면 뒤에 오는 단어 첫 글자를 대문자
= 카멜 표기법
4. 상수명 : 모든 단어를 대문자로 구성.
두 단어의 결합이라면 두 단어 사이에 _ 붙입니다.
스네이크 표기법[참고] : https://heytech.tistory.com/294
5. 사용할 수 없는 이름 : 예약어는 사용 불가 (이클립스 보라색으로 표시)
자바에서 프로그래밍 진행에 필요한 단어를 미리 등록하고 사용하고 있습니다.■ 데이터 타입 (정수/실수/문자/논리)
- 각 타입마다 메모리 크기가 엄격하게 제한됩니다.
- 정수 타입
* byte
* short
* int(integer)_기본타입
* long
- 실수 타입
* float
* double_기본타입
- 문자 타입 = 글자 한글자 = A, 가
* char(character)- 논리 타입 = true 참/ false 거짓
* boolean■ 프로모션과 캐스트
- 프로모션 : 변수를 대입할 때 작은 타입을 큰 타입에 대입하는 형태 = 자동 대입
- 캐스트 : 큰 타입을 작은 타입에 대입할 때 범위를 초과하므로반드시 해야하는 연산 (type)을 명기해서 값을 대입시킵니다.
이때 주의할 점은 상위 비트를 대입되는 타입에 맞게 잘라내기 때문에 값의 변화가 올 수 있습니다.괄호를 하는 이유는 괄호를 하지 않으면 연산 순서 법칙에 따라 32767을 short 타입으로 먼저 바꾸게 되어,
범위안에 들어오지 않기 때문이다.
■ 식별자(표식자)
- 최댓값 : MAX_VALUE
- 최솟값 : MIN_VALUE
long lNum 의 값이 9223372036854775807 로 요청 받았으나, 정수의 기본형은 int이다.
이는 int의 허용 범위를 넘었기 때문에 long로 인식시켜줘야 한다.
따라서 이를 위해 식별자 "L" 을 적어주면 오류 없이 컴파일 가능하다.
마찬가지로 float fNum 의 값이 3.14로 요청 받았으나, 실수의 기본형은 double이다.
오른쪽의 숫자가 double로 인식되기 때문에 오류가 나지 않기 위해서는 float로 인식시켜줘야 한다.
따라서 이를 위해 식별자 "F" 을 적어주면 오류 없이 컴파일 가능하다.
■ 기본 타입 크기 순서
- 정수보다 실수를 더 큰수로 인지합니다.
- byte < short < int < long < float < double
■ 예제 문제1
먼저 사과, 배, 오렌지를 변수를 선언하고 초기화 해준다.
이후에 총 생산갯수를 total, 시간당 생산 갯수를 avg 로 선언한다.
선언이 완료되면 total = apple + pear + orange; 로 대입해주고, avg를 구해준다.
avg는 총 생산 갯수를 시간(24) 로 나누면 되는데, total / 24 를 하면 0.7083333333333333 이 나와야 하지만
total과 24 모두 int 형으로 정수 0 이 나오게 된다.
따라서 24를 24.0 double 로 만들어 주고, int / double 을 하게 되면 double 로 표시하게 나온다.
왜냐면 계산에서 서로 다른 타입이 계산된다면 최고 큰 타입으로 변환이 일어나기 때문이다.
문제에서 평균 변수는 float 타입으로 선언해달라 했으므로 캐스팅을 통해
(float) 처리하여 avg = (float) (total / 24.0); 로 만들어준다.
이후 예시와 같이 출력을 위해 문자("") 와 + 를 사용하여 연결시켜준다.
■ 문자형
- 문자형 : 한글자만 저장합니다.
- 문자 하나를 저장하기 위한 타입
- 반드시 값으로는 문자 하나만 존재해야 하며
- 하나 이상일 경우엔 String(문자열)에 저장합니다.
- char 타입은 정수 타입입니다.- 크기는 음수가 없는 2byte의 범위를 가집니다. (0 ~ 65,535)
- 문자값을 표현할 때에는 반드시 홀따옴표를 이용EX) String 문자열 " ", char 캐릭터 ' '
- 정수타입이기 때문에 int에 프로모션 됩니다.※ int 가 char 보다 크기 때문이다.
- int값 또한 문자로 변경될 수 있습니다. (cast)※ 큰 타입 int가 작은 타입 char 에 대입하여 범위를 초과하여 cast 처리해준다.
Q) 아스키코드? (시작 순서와 끝나는 숫자는 기억! 시작: 0 끝: 127)
A) 컴퓨터는 문자를 문자로 기억하지 않는다. 그대신 순자로 기억하고 표현한다.
예를 들면 문자 'A'는 65로, 'B'는 66으로 표현한다. 모든 사람이 공통적으로 쓸 수 있는 표준 규격이 필요한데, 이것이 바로 아스키(ASCII : American Standard Code for Information Interchange)다. 1967년에 만들어졌고 알파벳에 기초를 둔 문자 인코딩 방법이다.
1바이트로 구성되어 있는 아스키 코드는 8비트(==1바이트) 중 7개의 비트만 사용한다. 나머지 1비트는 Parity Bit이라고 불리는 오류 체크를 위한 비트로 사용
Q) 유니코드?
A) 유니코드는 전 세계의 문자를 일관되게 표현할 수 있도록 설계된 표준이다.
유니코드는 1바이트가 아닌 2바이트, 즉 16비트로 문자를 표현한다. 따라서 2^16=65536 개의 문자를 표현
https://stepbystep1.tistory.com/10
아스키코드(ASCII Code)와 유니코드(Unicode)에 대하여 (tistory.com)
문자열 자르기 .charAt(자리수)
-> char 타입으로 나옵니다.
0 1 2 3 4 (각 자리 숫자)
안 녕 하 세 요
문자형 '9' 는 그대로 9가 나온다.
num 값은 33이 나오지만
num 값을 캐스팅한 (char) num 값은 아스키코드에 따라 !(33) 가 나온다.
ch 값이 위에는 9 밑에는 B가 나오는데 57은 아스키코드로 하면 숫자 9이다.
B는 (ch + 9) 를 먼저 계산해서 66 정수를 char로 캐스팅하여 B가 나온 것이다.
아래는 for 반복 구문을 통해 아스키코드 소문자 a 부터 z까지 표현한 것이다.
■ 10진법 2진법
10진수 2진수
0 01 1 = 1비트
2 10
3 11
4 100
5 101
6 110
7 111 = 3비트 = 2^2 + 2^1 + 2^0
8 1000
9 1001
10 1010 = 4비트 (bit 자리수)■ 논리형(boolean)
- 저장할 수 있는 값 : true 참 ON 1 / false 거짓 OFF 0
- == : 같다 라는 의미
- 계산 순서는 대입이 제일 마지막
- ! 는 반전 not을 의미. 따라서 !true 값은 false 가 나온다.
■ 자바 기본타입(p) 정리
■ 연산자 (+ - / *)
- 모든 프로그램에서느 데이터의 계산을 위해서 연산자를 사용합니다.
- 지금 배울 연산자는 다른 프로그래밍에서도 비슷하게 씁니다.
- 주의해서 보셔야 할 것은 연산자의 연산 순서 입니다.■ 연산자 순서
1. 최우선 연산자
. 클래스 또는 객체 소유의 변수, 메소드 등을 호출
[] 배열
()2. 단항 연산자
!(논리부정) ~(비트반전) +/-(부호연산) ++/--(선행증감)
3. 산술 연산자 +, -, /, *, %(모듈러:나머지 값)4. 쉬프트 연산자 <<, >>, >>>
5. 관계 연산자 <, >, <=, >=, ==, !=
6. 비트 연산자 &, |, ^
7. 논리 연산자 &&, ||, !
8. 삼항 연산자 조건식 ? 참일때 : 거짓일때;
9. 배정대입 : =, +=, -=, %=, /= 등등
10. 후행증감
++/--■ 연산순서 실습
++ 가 2번째, = 9번째 순서이므로 num 값은 1에서 1이 증가한 2
num2는 2로 바뀐 num의 대입이므로 2가 된다.
++가 두번째 이므로 num은 3 num2는 3이 된다.
증가한 num과 num2를 + 가 세번째 이므로, 합한 것을 9번째 대입하면 num3가 나온다.
따라서 num3 값은 6이 된다.
--와 ++가 두번째 순서이므로 num은 2 num2는 4가 된다.
2가 된 num과 4가 된 num2를 3번째 + 로 더해주고 이를 num3에 대입해준다.
따라서 num3은 6이 된다.
이번에는 - 3번째이므로 num에서 num2를 빼서 9번째인 = 을 대입하면 num3이 된다.
따라서 num3은 -2가 된다.
이후 10번째 -- 를 각각 해주면 num은 1 num2는 3이 된다.
+가 3번째 이므로 num 과 num2를 더하고 9번째인 = 을 대입하면 num3이 된다.
따라서 num3은 4가 된다.
이후 10번째 --를 각각 해주면 num은 0 num2는 2이 된다.
■ 몫과 나머지 (/, %)
나눈 후 몫은 / 로 표현하고, 나눈 후 나머지 값은 % 로 표현할 수 있다.
해당 코드에서 ssnCode = 1 로 홀수이며 이에 대한 나머지 값이 result 변수에 대입된다.
1에 대한 나머지 값은 1이므로 조건문 if 에서 result 값이 0과 같다에서 else 값을 나타나게 된다.
※ 1 % 2 와 같이 나눌 숫자가 나누는 수보다 작으면 그대로 1을 반환한다.
따라서 "당신은 남자 입니다." 가 출력된다.
■ 쉬프트 연산자
Integer.toBinaryString(sh) 는 sh 값을 이진수로 표현해준다.
여기서 << 3 는 이진수를 왼쪽으로 3칸 이동해달라는 말이다.
즉 2의 이진수 10은 왼쪽으로 3칸 이동하면
10
10000 이 된다.
>>는 아래 10의 이진수 1010은 오른쪽으로 2칸 이동해 달라는 뜻으로
즉 10의 이진수 1010은 오른쪽으로 2칸 이동하면
1010
10 이 된다.
>>> 의 경우 오른쪽으로 이동하되, 이동에 따른 빈공간은 0으로 채운다.
따라서 30칸 오른쪽으로 이동하면 빈공간은 0으로 채워져 11이 나오게 된다.
※ >>와 >>> 의 차이는 >> 는 이동에 따른 빈공간은 음수의경우엔 1, 양수의 경우엔 0으로 채우지만,
>>> 는 이동에 따른 빈공간은 0으로 채운다.
■ TEST
= 대입이 9번째, --가 10번째로
num9의 값이 먼저 num10에 대입돼 num10은 1이 되고,
이후 --로 num9 값을 빼주면 0이 된다.
2번째인 --먼저 하여 num9값은 -1이 되고,
num9 + num9 는 -2가 되어 num11에 대입하게 된다.
이후 num9 값을 -1 해주면 num9는 -2가 된다.
※ 기호 설명
- /* */ : 주석 설정
- /** : 문서 주석
※ 단축키
- 정렬 : Ctrl + Shift + F
'개발 > 국비교육' 카테고리의 다른 글
(국비교육) 6 - 구구단 출력하기 + %활용문 + 배열 (0) 2023.06.08 (국비교육) 5 - 메소드 호출 + if, for 문 + 별찍기 + 10진법 2진법 나타내기 (0) 2023.06.07 (국비교육) 4 - 자바 연산자 + 조건문과 반복문 + 2의 배수 만들기 + Fizz Buzz + 논리연산자 + 비트연산자 + 제어문 (0) 2023.06.05 (국비교육) 2 - 자바 기초 (0) 2023.06.01 (국비교육) 1 - 센터 담당자 소개 및 교육 진행 방향 (0) 2023.06.01