>변수(Variable)
:값을 담는 저장 공간이다.
(값:데이터,상수,리터럴 등등)
X = 10
변수명 대입 값
저장공간의 연산자
이름
=(대입연산자)
-->오른쪽에 있는 값을 왼쪽의 저장공간에 넣어라!
그래서 x=10 (O), 10=x(X)
>자료형
:저장공간이나 값의 타입, 종류
자료형 | type | byte | 예 |
정수형 | int | 4 | 0, -110, 244, ..(-21억 ~ 21억) |
long | 8 | 0L, -110L, 244L, .. | |
실수형 | float | 4 | 0.0F, -1207.1F, 12.417F |
double | 8 | 0.0, -1207.1, 12.417, ... | |
문자형 | char | 2 | '0', '가', 'A', '~', .. |
문자열 | String | ?? 정해지지않음 | "0", "HE","", ... |
-정수형:int, long 이 존재하는 데 int가 보통 디폴트 타입이다.
-실수형:float, double이 존재하는데 double이 보통 디폴트 타입.
---> 그러므로 long과 float를 표현할때는 뒤에 L , F 붙여야 한다.
*String은 클래스이다.
[bit와 bite 의 의미]
-bit:0,1 두가지로 표현 할 수 있는 단위
-byte: 8 bit
(왜 8 bit 일까?
카더라이지만 영어 대소문자, 특수문자까지 표현하려면 256자 정도 필요하여
최소 2에 8승 으로 즉 8 비트는 필요하여 이렇게 책정한것으로 보인다고 한다)
>변수의 선언
자료형 변수명 = 초기값;
int a = 34
변수 선언시 RAM
int x = 10;
x라는 이름의 저장공간이 RAM에 할당되고 10이라는 값이 들어간다.
공간이 만들어졌으므로 주소값이 부여되지만 알 수 없다.
>>변수 선언시 주의사항
:같은 이름의 변수를 선언할 수 없다.
:초기화를 해준다.(초기값을 넣어준다)
:되도록 선언부 (메소드 상단)에 한꺼번에 선언한다.
>>변수명 주의사항
:숫자는 맨 앞에 쓸 수 없다. (1num -> num1)
:예약어는 쓸 수 없다.(ex: public x)
:공백은 쓸 수 없다.(ex:hello java)
---> 그래서 대신 _(언더바)를 사용할 수 있다. (ex:hello_java)
:특수 문자는 쓸 수 없다.
:카멜 표기법: 소문자 대문자를 자유자재로 사용가능하다.
ex: noWhere (첫글자는 무조건 소문자!)
:되도록 소문자만 사용한다.
:되도록 한글은 사용하지 않는다-> 범용성
:뜻이 있는 명사형 단어를 선택한다.
a,b,c,... (x) data, num, score, ... (o)
>>변수의 사용
변수명을 그대로 사용한다.
int num = 10; // 변수를 int로 선언했다.
num = 20; // num이라는 공간을 사용 (대입할때만 (=))
System.out.println(num); // num에 담겨있는 변수를 출력하라의 의미
num = num+5; // num+5 는 25이므로 하나의 값으로 취급
값 25를 num이라는 공간에 넣었다.
>>변수의 사용 이유
1. 반복되는 같은 의미의 값을 쉽게 관리하기 위해서
2. 값에 의미부여를 하기 위해서
----------------------------------------------------------------------------------------------
>입력
:사용자가 개발자에게 값을 넘겨주는 행위
>>입력상태
:커서가 깜박이면서 값이 들어오기를 기다리는 상태
:값이 입력되지 않으면 다음으로 진행이 불가하다.
:개발자가 할 수 있는 일은 사용자에게 입력상태로 만들어주는것 까지이다.
:아래 코드들은 사용자가 값을 입력했다고 가정하고 작성한다.
:입력받기 전 사용자가 잘 입력할 수 있도록 먼저 출력해준다.
<순서>1.출력아이디랑 비밀번호 칠 수 있도록 아이디: 비밀번호: 창이 사용자에게 보이도록 출력한다. 2.입력상태커서가 깜박이면서 사용자의 값을 기다린다.3.입력사용자가 입력한다. 4.처리데이터베이스에서 입력한 값을 처리한다. 5.출력처리된 값을 출력한다.
>입력 메소드
Scanner sc = new Scanner(System.in); // 입력을 위해서 준비시키는 과정
new Scanner(System.in).next();
= sc.next();
(* . --> 하위 연산자이다)
ex) A.b: A안의 b / A의 b
>>입력 메소드의 종류
next() :사용부분 통째로 사용자가 입력한 문자열 값
:공백 또는 엔터를 구분점으로 판단하고 분리하여 입력받는다.
ex)코린이: "코", "린이"로 분리하여 "정"만 입력받는다.
띄어쓰기가 포함된 경우에는 값의 개수만큼 next()를 사용해 주어야 한다.
ex)코린이 늘또 블로그
name1 name2 name3
nextLine():사용부분 통째로 사용자가 입력한 문자열 값
공백도 문자로 입력받는다.
ex)코린이 늘또 --> "코린이 늘또"
앞에 다른 입력이 있다면 의미없는 nextLine()을 할번 미리 써주어야 한다.(참조2)
nextInt(): 사용부분 통째로 사용자가 입력한 정수 값
*Scanner라는 메소드를 쓸 때 import를 해서 라이브러리를 가져와야 한다. (Scanner sc 부분에 자동완성하면 같이 뜬다)
다시 간단히 정리하면 앞에 다른 입력이 있다면 의미없는 nextLine()을 할번 미리 써주어야 한다
---------------------------------------------------------------------------------------------------------------------
>형변환
:자바에서는 정수와 정수의 연산은 결과도 정수로 나온다.(ex: 10/3 =3)
:실수로 된 결과를 받으려면 피연산자(항)를 실수로 바꿔주는 방법이 필요하다.
1)자동 형변환(암시적 형변환)
정수 + 실수 ----> 실수
ex) 3+0.0 ----> 3.0
문자 + 정수 ----> 정수
ex)'A'+3--> 68 (아스키코드이므로)
문자열 +정수,실수,... ----> 문자열
2)강제 형변환(명시적 형변환)
(자료형) : 형변환연산자
(자료형)값
ex) (double)10
*String 은 불가능하다. 왜냐하면 클래스이기 때문에 형변환도 같은 클래스끼리만 가능하다. (다운캐스팅때 배움)
---------------------------------------------------------------------------------------------------------------------------------->연산자
:한 문장 안에 다양한 연산자가 있을 때 먼저 연산하는 순위
1.최우선 연산자
(), .
2.단항 연산자
! ~ 형변환연산자
3.이항 연산자
1)산술 연산자
+ - * / %
2)쉬프트 연산자
>> <<
3)관계 연산자
> < <= >= == !=
4)논리 연산자
&& ||
4.삼항 연산자
5.대입 연산자
=
>>연산자의 결합성
:한 문장 안에 우선순위가 같은 연산자들이 있을 때 맞는 방향으로 결합 후 연산되는 성질
ex) 1+2+3+4+5 = 15
그러나 컴퓨터가 연산하는 방식 ↓
(1+ 2) + 3 + 4 + 5
(3 + 3) + 4 + 5
(6 + 4) + 5
10 + 5
15
*조심해야할 것
ex)"친구"+ 3 + 5 = 친구8 이렇게 안나옴
---> 친구35 이런식으로 나옴. () 괄호를 통해 먼저 연산할 부분 지정해주어야 한다.
>>연산자의 종류와 특성
1. 산술 연산자(+,-,x,%,/)
a % b : a 를 b로 나눈 나머지
10%3 ---> 1
>비트 연산
1 bit :컴퓨터 용량의 최소단위, 0 또는 1 하나를 담을 수 있는 공간
1 byte :8 bit를 모아서 하나의 단위로 만든것, 의미를 가지는 데이터(메모리)의 최소
용량
ex) 17 10001 , 14 01110
1) &(AND) 논리곱 : 두 비트가 모두 1일 때 1
ex) 14 & 17 --> 01110 & 10001 ---> 00000
2) |(OR) 논리합 : 두 비트중 하나라도 1이면 1
ex) 14 & 17 --> 01110 & 10001 ---> 11111 ---> 31
3) ^(X-OR) 배타논리합(exclusive OR) : 두 비트가 서로 다르면 1
ex)14 ^ 17 --> 01110 & 10001 ---> 11111 ---> 31
4) ~(NOT) 논리부정, 비트뒤집기 : 0은 1로, 1은 0으로 바꾼다.
부호 비트도 거꾸로 뒤집힌다. (양수 -> 음수/ 음수 -> 양수)
ex)~14 --> ~01110 --> 10001 ---> -15 (17일것 같지만 아니다~ 음수체계는 다르다))
<보수법>
-음수를 비트 연산 할 경우: ~a = -(a+1)
사실 정수는 4byte이다. 그래서 1bit로 나타내려면 4*8 = 32자릿수여야 한다.
그래서 실제로 01110 과 10001 의 값은 아래와 같다.
[0]0000000000000000000000000001110
[0]0000000000000000000000000010001
논리를 부정하게 되면 ↓
[1]1111111111111111111111111110001
-앞의 0,1 은 음수 양수를 뜻한다.
(1) 1로 바뀌었으므로 음수로 변화했음을 알 수 있다.
(2) 이진법을 십진법으로 바꿀때 음수에서는 1이있는 값을 더하는것이 아닌 0이 있는 값을 더해야한다.
(10001 --> 8+4+2 =14)
(3) 나온 값에 +1 해서 음수를 붙여준다
-->답은 -15이다.
2.쉬프트 연산자(비트 이동)
1) >> a >> b :a를 b만큼 우측으로 비트이동
ex)[10 >> 1] --> [1010 >> 1] ---> [ 0101] --> 5
2) << a << b :a를 b만큼 좌측으로 비트이동
ex)[10 << 1] --> [1010 >> 1] ---> [10100] --> 20
>조건식
:조건을 제시하는 식
:주장하는 식
:결과가 true, false 단 두가지로 나오는 식
10>3 --> true
자바에서는 true, false라는 값로 참, 거짓의 값을 표현한다.
10+15 :라는값
10<15 :false라는 값 (하나의 값이라는 사실)
논리형 boolean 1 byte true, false
3.관계 연산자
:조건식을 만드는데 사용되는 연산자, 비교 연산자
>, < :초과, 미만
>=, <= :이상, 이하
== :같다
!= :다르다
4.논리 연산자
:여러 조건식들의 관계를 설정해주는 연산자/ A,B는 조건식으로 가정한다.
A && B :두 조건식의 연산결과가 둘 다 TRUE 이면 TRUE
A || B :두 조건식의 연산결과가 둘 중 하나라도 TRUE 면 TRUE
num == 1 || 2 (x)
num == 1 || num == 2 (o)
5.단항 연산자
!A :A조건식의 연산결과가 true라면 False로, false이면 true로 바꿔준다.
ex) 정수인데 문자열 타입인 경우 어떻게 바꾸어야 하는가?
int realNum1 = (int)num1; 하면 오류 생김. 문자열은 클래스 타입이기 때문에 형변환 연산자로 자료형 바꿀수 없다..!
Integer.parseInt() 를 쓰면 통째로 정수로 해석하여 돌려준다.
'프로그래밍 > Java 정리' 카테고리의 다른 글
Java 6일차 -메소드 (0) | 2021.11.23 |
---|---|
Java 4일차 -for문 (0) | 2021.11.23 |
Java 5일차 -배열 (0) | 2021.11.22 |
Java 3일차 -조건문 (0) | 2021.11.19 |
Java 1일차 (1) | 2021.11.16 |