WEB/Back-end
자료형 (Java)
최새벽
2024. 5. 22. 11:41
Java
- 옛날에는 JDK(개발), JRE(실행) 따로 설치했어야했음. 최근에는 JDK안에 JRE가 포함되어 있다.
- JRE(Java Runtime Environment): 자바 실행환경
- source는 src, output은 bin에 저장
- Library: 미리 만들어 놓은 프로그램
- jar: Java ARchive 하나의 라이브러리 단위. 수많은 class들을 모아놓은 것. class = java 파일을 실행하기 위해서 컴파일 한 것
텍스트 파일 인코딩 설정, 다르면 문자 깨질 수 있음
character encoding set
문자 인코딩 집합
character set
문자 집합
UTF-8
변수명명
- 의미있는 이름으로 이름 짓기, 자바 명명 Camel Case
정수타입
- byte < short < int (-21억~21억) < long
- byte, short는 연산과정에서 중간 int로 변환됨 -> 오히려 부담. 그냥 int이상으로 쓰기
실수타입
- double
- 범위: int < long < double ...
자료형
- 기본자료형: primitive type
int long double boolean - 참조자료형: reference type
변수
- 프로그램 실행 중에 변할 수 있는 수
- 다른 곳에서 사용(=여러번 사용)시 활용
- 메모리에 저장된 값을 가리키는 주소
- 선언(JS, 파이썬에서는 안해줘도 됨)
자료형 변수명;
- 초기값 설정, 초기화
변수명 = 값;
자료형(data type)
- 정적 타이핑(static typing): 자바, C++, 자료형 지정 후 바로 변경(다른 자료형으로 변수 지정) 안됨
- 동적 타이핑(dynamic typing): 파이썬, JavaScript
- 기본자료형: 정수, 실수, 문자, 논리
- 참조자료형: 배열, 클래스, 인터페이스 ...
이스케이프 문자
\t \" \n \\
형변환(타입 변환)
// 자동형변환: 큰 타입에 작은 타입 대입하면 자동으로 형변환이 일어남
int a = 1;
long b = a;
// a = b 는 안된다.
double = b;
// 강제형변환(Casting, cast): 직접 명령해서 형변환 시킴
b = (long)c;
// 소수의 경우 정수로 강제형변환하면 소수점 버림.
// java 에서 정수끼리 연산 결과 정수 -> 10/3=3
// 연산 중 자동 형변환
// byte, short 타입은 연산 과정에서 int로 바뀐다.
// 실수는 double로
byte x = 10;
byte y = 20;
// byte z = x + y; <-- 컴파일 에러.
int z = x + y; // 정상 실행
문자열 형변환
String s1 = "1";
// int i1 = (int)s1; <-- 에러 발생
- 문자열 -> 기본자료형:
클래스명.parse자료형(값)
- Interger.parseInt(str);
- Short.parseShort();
- Long.parseLong();
- Byte.parseByte();
- Boolean.parseBoolean();
- Double.parseDouble();
- Float.parseFloat();
- 기본자료형 -> 문자열:
String.valueOf(값)
변수 사용 범위: 중괄호 '{ }'
문자열 포맷팅 printf()
%s
: String, 다른 타입도 들어갈 수 있음.%d
: Decimal%f
: Float
데이터 입력 받기
import java.util.*; // java util 라이브러리 활용
Scanner scanner = new Scanner(System.in);
// 타입 변수 값(객체)
// Scanner를 활용하는 방법은 다소 느리다.
String inputData1 = scanner.nextLine();
int inputData2 = scanner.nextInt();
String inputData3 = scanner.next();
연산자
증감연산
- 전위 연산: 현재 실행문이 실행되기 전
int a = 1; System.out.println(--a); // 0 출력 System.out.println(++a); // 1 출력
- 후위 연산: 현재 실행문이 실행된 후
int b = 1; System.out.println(b--); // 1 출력 System.out.println(b++); // 0 출력 System.out.println(b); // 1 출력
나눗셈 연산
int score = 80; // %
System.out.println(score/100.0);
System.out.println(score/0.0); // -> Infinity
System.out.println(score%0.0); // -> NaN(Not a Number)
문자열 비교 연산
: 문자열과 같은 참조 자료형에서 비교 연산(==
) : 주소 값이 동일한지 확인함
boolean result1 = str1.equals(str2) // 같은 문자열인지
boolean result2 = !str1.equals(str2) // 다른 문자열인지
String data = null;
System.out.println(data.equals("q")) // 첫 번째
System.out.println("q".equals(data)) // 두 번째
// 두 번째 방법으로 작성하기 권장.
// data가 null값일 수도 있기 때문 -> nullPointerException 발생
논리 연산자
- AND
&&
if ((논리1)&&(논리2)){ (실행문) } // 논리1이 false이면 논리2 확인x, 논리2가 예외 발생 코드여도 실행x // 논리1이 true이고 논리2가 exception 발생하면 exception 발생
- shortcut
if (id != null && id.equals("admin")){ (실행문) } // -> 확인해야할 예외 상황을 앞에 배치해서 필요없는 비교 상황 및 논리 확인 최소화 // or 연산에서 앞에 논리가 true이면 뒤에 확인x
삼항 연산자
조건 ? 참 일때 실행문(혹은 변수) : 거짓일때 실행문(혹은 변수)
- html에서 줄 바꿈 없이 조건문을 활용하기 위해서 삼항 연산자를 사용할 수 있음
// score가 60이상이면 합격, 미만이면 불합격 int score = 60; System.out.println(score >= 60 ? "합격" : "불합격");
- 중첩해서 쓰기
// score가 60이상이면 합격, 30이상 60미만이면 재시험, 30미만 유급 System.out.println(score >= 60 ? "합격" : score >= 30 && score < 60 ? "재시험" : "유급");
연산자 우선순위
- 소괄호
()
가 우선순위 제일 높다. - 대입 연산
=
이 우선순위 제일 낮다.
랜덤 난수 생성
Math.random()
: 0이상 1미만의 실수 난수- 활용
(int)(Math.random() * 6) + 1
: 1~6까지의 정수