프로그래밍/Java 정리

Java 2일차 -변수

윤도ri 2021. 11. 17. 17:40

>변수(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 부분에 자동완성하면 같이 뜬다) 

 

&amp;nbsp; 참조2. nextLine()이 하나만 오면 nextInt에서 enter가 사라지면서 당신은 22살입니다 라는게 nextLine을 치면서 마무리가 되고 주소에 대한 값은 나오지 않고 끝난다.

다시 간단히 정리하면 앞에 다른 입력이 있다면 의미없는 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