[JAVA] Studying Java #002

김상우·2024년 10월 23일

JAVA

목록 보기
2/3
post-thumbnail

변수와 타입

변수

  • 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
  • 변수 선언
int height; //정수(int)값을 저장할 수 있는 height 변수 선언
double weight; //실수(double)값을 저장할 수 있는 weight 변수 선언
  • 첫 번째 글자가 문자여야 하며 중간부터 문자, 숫자, '$', '_' 포함 가능
  • 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례
    *캐멀(camel) 스타일: 코드를 작성할 때 여러 단어를 혼합하여 명명하는 경우, 낙타의 등처럼 대소문자가 섞여있도록 작성하는 스타일. 소스 파일, 변수명에 관례적으로 사용 ex) WaveTime
  • 리터럴(literal): 코드에서 프로그래머가 직접 입력한 값
  • 변수 초기화: 변수에 최초로 값을 대입하는 행위; 이때의 값이 초기값.
int age = 28;
//28을 변수 age에 대입(초기값)

double weight; //초기화하지 않고 선언만 가능(메모리 할당X )
  • 변수는 또 다른 변수에 대입되어 값을 복사할 수 있음
int a = 10; //변수 a에 10의 값 초기화
int b = a;  //변수 b에 b를 대입 
  • 변수는 선언될 때 타입에 따라 저장할 수 있는 값의 종류와 허용 범위가 달라짐. 자바는 정수, 실수, 논리값을 저장할 수 있는 기본(원시, primitive)타입 8개를 제공
값의 분류기본 타입
정수byte, char, short, int, long
실수float, double
논리(true/false)boolean

정수 타입

타입메모리 크기
byte1byte(8bit)
short2byte(16bit)
char4byte(32bit)
int4byte(32bit)
long8byte(64bit)
  • long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용.
  • 컴파일러는 정수 리터럴을 int 타입 값으로 해석하기 때문에 int 타입의 허용 범위를 초과하는 리터럴은 뒤에 ‘l’이나 ‘L’을 붙여 long 타입 값임을 컴파일러에 알려주어야함
long value = 100000000000000; //컴파일 에러 발생
long value = 100000000000000L; // 편-안 

문자 타입

  • 문자 리터럴: 하나의 문자를 작은따옴표(’)로 감싼 것
    • 유니코드로 변환되어 저장
    • char 타입 사용
char value = 'A'; //'A'와 매핑되는 숫자 65
char value2 = 65; // 10진수 65와 매핑되는 문자 'A'
char value3 = ' '; // 공백 한 칸으로 변수 초기화/빈(empty)문자 대입시 컴파일 에러 발생

실수 타입

타입메모리 크기
float4byte(32bit)
double8byte(64bit)
  • double 타입이 float 타입보다 큰 실수를 저장할 수 있으며 정밀도 또한 높음
    * 'double'이라는 이름은 float보다 2배의 정밀도를 갖는다는 의미에서 붙여짐
  • 컴파일러는 실수 리터럴을 double 타입 값으로 해석하기 때문에 float 타입의 허용 범위를 초과하는 리터럴은 뒤에 ‘f’이나 ‘F’을 붙여 float 타입 값임을 컴파일러에 알려주어야함
float value = 3.14; // 컴파일 에러 발생
float value = 3.14f;
float value2 = 3E6F;

논리 타입

  • 논리 리터럴: 참(true)과 거짓(false)
  • boolean 타입 사용
    • 조건문, 제어문의 실행 흐름 변경에 사용
boolean stop = true;
if(stop) {
	System.out.println("중지");
	} else {
		System.out.println("시작");}

//출력값 = 중지

문자열 타입

  • String 타입 변수(String타입은 참조 타입이다)
    • 문자열: 큰따옴표(”)로 감싼 여러 개의 문자 - 유니코드로 변환 불가
char value = "A" //컴파일 에러 발생
char value2 = '김영태' // 컴파일 에러 발생
String value = "A";
String value2 = "이병건"
  • 이스케이프(escape) 문자
    • 문자열 내부에 사용할 수 있는 역슬래쉬()가 붙은 문자
    • 특정 문자를 사용할 수 있고 출력에 영향을 미침
이스케이프 문자
\”“ 문자 포함
\’‘ 문자 포함
\\ 문자 포함
\u16진수16진수 유니코드에 해당하는 문자 포함
\t출력 시 탭만큼 띄움
\n출력 시 줄바꿈(라인피드)
\r출력 시 캐리지 리턴

자동 타입 변환

  • 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생
  • 기본 타입 허용 범위 순 나열
byte < short, char < int < long < float < double
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환
  • 정수 타입 → 실수 타입 대입은 무조건 자동 타입 변환
long longValue = 100000000L;
float floatValue = longValue; //5.0E9F로 저장
double doubleValue = longValue; // 5.0E9로 저장
  • char 타입 → int 타입 대입은 유니코드 값이 int 타입에 대입
char charValue = 'A';
int intValue = charValue; //65 저장
  • 예외의 경우: byte 타입 → char 타입
    • char 타입이 byte 타입보다 허용 범위가 크지만 byte 타입은 허용 범위에 음수를 포함하는데 반해 char 타입은 포함하지 않아 자동 타입 변환이 불가
byte byteValue = 10;
char charValue = byteValue; // 컴파일 에러 발생
  • 연산식에서 자동 타입 변환
    • 정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 변환되어 연산 수행

      byte x = 10;
      byte y = 20;
      byte z = x + y; //컴파일 에러 발생
      int z = x + y;
    • 실수 연산

      float result = 1.2f + 3.4f; // 피연산자에 모두 f가 붙어 있기에 float 타입으로 연산 수행
      double result1 = 1.2f + 3.4; // 피연산자 중 하나가 double 타입이므로 연산 결과 또한 double 타입
    • 연산자의 두 가지 기능

      • 피연산자가 모두 숫자일 경우: 덧셈 연산
      • 피연산자 중 하나가 문자열일 경우: 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산
      String str = 1 + "2" + 3; //str = "123"
      String str = 1 + 2 + "3"; //str = "33"

강제 타입 변환(캐스팅, casting)

  • 큰 허용 범위 타입 → 작은 허용 범위 타입의 자동 타입 변환은 불가 / 하지만 작은 단위로 쪼개어 넣는 것은 가능
  • 캐스팅 연산자 괄호 () / 괄호 안에 들어가는 타입은 쪼개는 단위
  • intbyte
    int intValue = 10;
    byte byteValue = (byte) intValue;
    • 4byte인 int 값의 끝 1byte 부분만 byte 타입 변수에 저장되고 나머지 3byte는 삭제

    • 10진수 10은 앞의 3byte 부분이 삭제돼도 값의 변화가 없기 때문에 원래 값 10 그대로 보존

      int intValue = 103029770;
      byte byteValue = (byte) intValue; //출력값: 10
    • 10진수 103029770은 앞 3byte 의 값이 삭제돼 값이 온전히 보존되지 못함

  • longint
  • intchar
    • char 타입의 허용 범위인 0~65535 사이의 값만 유지
  • 실수 → 정수
    • 소수점 이하 부분은 삭제, 정수 부분만 저장

연산식에서 자동 타입 변환

정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int타입보다 작은 byte, short타입의 변수는 int타입으로 자동 타입 변환되어 연산 수행

byte x = 10;
byte y = 20;
~~byte~~int result = x + y;

문자열의 기본 타입 변환

String result =10+ 2 + 8;
System.out.println(result);
//실행 결과 = 1028

피연산자 중 하나가 문자열일 경우 나머지 피연산자도 문자열로 자동변환되어 문자열 결합 연산 수행

int eng = 100;
int kor = 95;
double avg = (eng + kor) / 2;

평균이 97.0 으로 정확한 답이 나오지 않음
int끼리 계산중 소수점이 짤리기 때문
→ 2를 2.0 혹은 'double(eng + kor)'으로 형변환

키보드 입력 데이터를 변수에 저장

Scanner sc = new Scanner(System.in);
  • 예시
System.out.println("학점 (A, B, C, F) 입력");
char grade = sc.next().charAt(0);
System.out.println(grade);

System.out.println("두 점수입력");
int a = sc.nextInt();
int b = sc.nextInt();

System.out.println("평균" + (a + b) / 2.0);

System.out.println("이름: ");
String name = sc.next();
  //변수선언      입력한 값    --> 이름을 입력하여 변수 name에 대입

System.out.println("점수: ");
int com = sc.nextInt();

System.out.println(name + " " + com);
profile
sudo love me spring

0개의 댓글