JAVA/변수
1. 변수(Variable) 기본
: 메모리에 값을 기록하기 위한 공간 (하나의 바구니, 박스라고 생각하자!)
=> 어떤 값을 담기 위해 하나의 공간을 마련해두는 것
1) 프로그램 처리과정(입력 -> 출력 까지의 과정)
★ 메모리(RAM)라는 공간에 입력할 때 입력 값을 기록하기 위한 변수라는 바구니 만들어주기!
2) 변수를 사용해야만 하는 이유??
- 가독성이 좋음(우선적으로 값에 의미를 부여해놓고자하는 목적)
- 계속 재사용하므로 코드량 감소
- 유지보수 용이
※ 패키지 만들때 권장사항 : 세 단계로 만들어주는 것을 권장 (com.회사명.프로젝트명 또는 팀명) => 두번째 레벨까지는 주로 도메인의 역순으로(도메인은 고유한 이름, 패키지만 봐도 어디서 제작한 프로젝트인지 알 수 있음)
변수 사용 예시
package com.kh.variable;
public class A_Variable {
public void printVariable() {
int point = 100;
int bonus = 10;
int fees = 10;
int personCount = 10;
System.out.println(point + bonus);
System.out.println((point + bonus) * personCount);
System.out.println((point + bonus) * personCount - fees);
System.out.println((point + bonus) * personCount / fees);
}
3) 변수의 선언(변수 만드는 과정)
[표현법] 자료형 변수명 = 값;(변수 선언과 동시에 값을 대입 - 초기화하겠다)
※ 변수를 선언한 메소드 외에는 다른 메소드 영역에서 사용할 수 없음 : 지역변수
자료형이란? 변수의 크기 및 모양(어떤 값, 어느 정도 크기..)
변수 사용 예시
// 1. 논리형
boolean isTrue = false;
// 2_1. 숫자형(상수형)
byte bNum = 1;
short sNum = 2;
int iNum = 4;
long lNum = 8L;
// 2_2. 숫자형(실수형)
float fNum = 4.0f;
double dNum = 8.0;
// 3. 문자(한글자)형
char ch = 'c';
// 참조자료형
// 4. 문자열
String str = "저에욥";
4) 변수 네이밍 규칙
1) 변수명 중복불가
2) 대소문자는 구분
3) 변수명은 기존 프로그래밍언어의 내용으로 해서는 안됨.
4) 숫자로 시작하면 안됨.
5) 특수문자는 _ $ 만 허용
2. 사용자에게 값 입력 받기
: 자바 자체에 있는 메소드 : java.util.Scanner 를 사용해야 함
1) Scanner 메소드를 불러오는 방법
(1) java.util이라는 패키지에 존재하는 클래스를 먼저 생성해주기 (Scanner sc = new Scanner();)
★ "객체 생성"(즉, Scanner 클래스에 있는 것을 사용하려면 Scanner 객체를 생성해주어야 함!)
(2) import 해주기 (다른 패키지에 있는 것 가져오기)
(3) Scanner sc = new Scanner(System.in) => System.in(사용자에게 입력 받는다는 매개변수 호출)
: 입력 받은 값을 바이트 단위로 받아들이겠다.
사용 예시
// (1) 사용자에게 값을 입력하라고 유도
System.out.print("당신의 이름은 무엇입니까 : ");
// (2) 사용자가 입력한 값을 문자열로 받아오고 동시에 변수 선언하기
(sc.next() -> 단어 하나만, sc.nextline()-> 한 줄 읽어옴)
String name = sc.nextLine();
// (3) 입력한 값을 출력해보기
System.out.pritln(name);
- 정수 : sc.nextInt();
- 실수 : sc.nextFloat(); sc.nextDouble();
- 문자열 : sc.next();-> 띄어쓰기 불가, sc.nextLine(); -> 띄어쓰기 가능, 줄 구분까지 저장
- 문자하나 : sc.nextLine().charAt(문자 순번 = 인덱스); : 문자 하나만 가져옴
- sc.nextLine(); 특징
: 입력 -> 입력버퍼(대기장소) -> 메모리 이렇게 보내는 것이 원리임 (버퍼는 임시저장소)
버퍼에서 값을 가져온 후 "엔터"를 비워주는 역할 수행
<->
그 외의 next~~ : 버퍼에서 값을 가져오고 끝냄("엔터"를 비워주지 않으므로 "엔터"가 여전히 남아있어서 이후 sc.nextLine을 다시 실행하면 그 엔터 값을 가져와버림.
해결 법 : next메소드와 nextLine 사이에 nextLine 하나 추가해주는 방법(키와 주소 사이에 nextLine 하나 추가해주기)
3. 상수(Constant)
: 변하지 않는 값을 담아두어 ★변경 불가(고정인 값)
[표현법] final 자료형 변수명(대문자) = 값;
4. 형변환(Casting)
: 값의 자료형을 바꾸는 것 (Boolean 제외)
컴퓨터에서 값 처리 원칙
1) 같은 종류 자료형만 대입 가능
2) 같은 종류 자료형만 계산 가능
3) 계산의 결과도 같은 종류의 값이여야 함
-> 이런 원칙 3가지가 지켜지지 않을 경우 형변환 필요!
1) 자동 형변환
: 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 반환!
단, byte와 short 자료형 값의 계산결과는 무조건 int로 처리
- 아스키코드(0~127, 영문/숫자/특수문자), 유니코드(0~65xxx, 영문/숫자/특수문자/한글)로 문자마다의 고유 숫자가 있음!
- char ch = 65; 라면 65코드에 맞는 문자가 출력
- int num = 'A';라면 A코드에 맞는 숫자가 출력
2) 강제 형변환(명시적 형변환)
: 큰 크기의 자료형을 작은 크기의 자료형으로 바꾸는 것
-> 강제 형변환 시 '데이터손실'이 발생할 수 있음(손실 감수하고 강제변환)
(실수형을 정수형으로 강제형변환 시 데이터 손실 발생할 수 있음)
[표현법 예시] double num1;
int num2 = (int) num1;
강제형변환 응용
int iNum = 10;
double dNum = 5.89;
// (int를 자동형변환 doubel로)10.0 + 5.89 => 15.89 iSum을 int 형이 아닌 double형으로
// 해결방법 1. 수행 결과를 int형으로 강제형변환
int iSum2 = (int)(iNum + dNum);
System.out.println(iSum2);
// 해결방법 2. dNum값만 int 형으로 강제형변환
int iSum3 = iNum + (int)dNum;
System.out.println(iSum3);
// 해결방법 3. 그냥 연산결과를 double로 담기(강제형변환 안됨)
double iSum1 = iNum + dNum;
System.out.println(iSum1);
기타 내용
※ 출력메소드 printf문
[표현법] System.out.printf(%형식, 변수);
<형식>
- %d: 정수형, %o: 8진수, %x: 16진수
- %c: 문자, %s: 문자열
- %f: 실수(소수점 아래 6자리), %e: 지수형태표현, %g: 대입 값 그대로
- %A: 16진수 실수
- %b: 논리형
<정렬방법>
- %5d: 5칸을 확보하고 오른쪽 정렬
- %-5d: 5칸을 확보하고 왼쪽 정렬
- %.2f: 소수점 아래 2자리까지만 표시
※ 변수와 메모리 구조
※ escape 문자(빠져 나가는 문자)
Author And Source
이 문제에 관하여(JAVA/변수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alsrnr45/JAVA변수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)