2021. 03. 23(화) TIL

eastgun_·2021년 3월 23일
0
post-thumbnail

Java

자바의 기본 데이터 타입(자료형)

  • 데이터 타입은 변수가 저장할 수 있는 값의 종류를 결정한다.
  • 변수를 생성할 때는 반드시 그 변수가 저장할 수 있는 값의 종류를 지정하여야 한다.
  • 자바의 기본 데이터 타입은 정수형, 실수형, 문자형, 논리형이 있다.

자바의 기본 데이터 타입의 종류

Type | Keyword | Size | Default value | Range
---- | ------- | ---- | ------------- | -----
논리형 | boolean | 1 byte | false | true, false
정수형 | byte | 1 byte | 0 | -128 ~ 127
정수형 | short | 2 byte | 0 | -32,768 ~ 32,767
정수형 | int (기본) | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647
정수형 | long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형 | float | 4 byte | 0.0F | 3.4 X 10−38 ~ 3.4 X 1038 의 근사값
실수형 | double (기본) | 8 byte | 0 | 1.7 X 10−308 ~ 1.7 X 10308 의 근사값
문자형 | char | 2 byte (유니코드) | '\u0000' | 0 ~ 65,535

리터럴(literal)

// 정수 리터럴
int a = 1000000;
int b = 1_000_000; // _를 이용해서 자릿수를 표시할 수 있다.
int c = 010;	// 0으로 시작하면 8진수 10이다. 010은 8이다
int d = 0x10;	// 0x로 시작하면 16진수 10이다 0x10은 16이다
long e = 100000000000L; // int 타입 값은 범위는 -21억 ~ 21억 이다.
		
// 문자 리터럴
char ch1 = 'A';
char ch2 = '가';
char ch3 = '河';
// char ch4 = ''; 	// 문자리터럴은 반드시 한 글자를 가지고 있어야 한다.
char ch5 = ' ';		// 공백도 한 글자다
// escape 문자
char ch6 = '\t';	// 탭 문자
char ch7 = '\n';	// 줄바꿈 문자
char ch8 = '\'';	// '
char ch9 = '\"';	// "
char ch10 = '\\';	// \
// 유니코드로 문자를 표현하기
char ch11 = '\u0076';
System.out.println('\uac00');	// 유니코드 ac00은 '가';
System.out.println('\uac01');	// 유니코드 ac01은 '각';
System.out.println('\uac02');	// 유니코드 ac02는 '갂';

String st1 = "";
String st2 = "가나다라";
String st3 = "서울시 종로구 율곡로10길 105 디아망빌딩 402호";
String st4 = "김유신\n강감찬\n이순신\n\uac00\uac00\uac00";
System.out.println(st4);
		
// 실수 리터럴
double d1 = 3.14;
double d2 = 3.;
double d3 = 3.0e4; // 3.0 x 10^4
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
		
float f1 = 3.14f;	// 실수를 float타입의 변수에 저장할 때는 f를 접미사로 붙인다.
float f2 = 3.f;
float f3 = 3.0e4f;
		
// 불린형 리터럴
boolean b1 = true;	// boolean타입의 값은 오직 true, false 두가지 뿐이다.
boolean b2 = false;
/*
 * 이름, 전화번호, 이메일, 주소, 나이, 키, 몸무게, 결혼여부 등을 저장할 수 있는 변수를 정의하고
 * 그 변수에 값을 저장하기
 * System.out.println(변수명)을 이용해서 변수에 저장된 값 출력하기
 */
		
String name = "홍길동";
String phone = "010-1234-5678";
String email = "Honggildong@naver.com";
String address = "서울시 강남구";
int age = 100;
double tall = 192.4;
double weight = 87.01;
boolean marital = false;
		
System.out.println("이름 : " + name + "\n전화번호 : " + phone + "\n이메일 : " + email);
System.out.println("주소 : " + address + "\n나이 : " + age + "\n키 : " + tall);
System.out.println("몸무게 : " + weight + "\n결혼여부 : " + marital);

기본자료형의 형변환

  • 형변환은 값을 다른 타입의 값으로 변환하는 것이다.
  • 숫자와 문자 타입만 데이터 형변환이 가능하다.
  • 형변환의 종류
    • 자동 형변환
      • 크기가 작은 타입의 값을 크기가 큰 타입의 값으로 변환하는 것은 자동으로 처리된다.
      • 정밀도가 낮은 타입의 값을 정밀도가 높은 타입의 값으로 변환하는 것을 자동으로 처리된다.
    • 수동 형변환
      • 크기가 큰 타입의 값을 크기가 작은 타입의 값으로 변환하는 것은 개발자가 형변환 연산자가 지정해야 한다.
      • 정밀도가 높은 타입의 값을 정밀도가 낮은 타입의 값으로 변환하는 것은 개발자가 형변환 연산자를 지정해야 한다.
// 기본자료형의 형변환
// 기본자료형 타입의 값을 다른 타입의 값으로 변환하는 것이다.
// 정수 -> 실수, 실수 -> 정수, 문자 -> 정수, 정수 -> 문자로 변환하는 것만 가능하다.
//
// byte -> short -> int -> long -> float -> double
		
// 자동 형변환
int a = 10;		// [0][0][0][00001010]
long b = a;		// [0][0][0][00001010] -> [0][0][0][0][0][0][0][00001010]
float c = a;		// 10 -> 10.0 a에서 복사해 온 값이 10.0으로 변환된 후 c에 대입된다
double d = a;		// 10 -> 10.0 a에서 복사해 온 값이 10.0으로 변환된 후 d에 대입된다
System.out.println("a의 값 : " + a);
System.out.println("long타입의 변수 : " + b);
System.out.println("float타입의 변수 : " + c);
System.out.println("double타입의 변수 : " + d);
		
System.out.println(3 / 4);		// 0		<-- 정수/정수
System.out.println(3.0 / 4.0);		// 0.75		<-- 실수/실수
System.out.println(3.0 / 4);		// 0.75		<-- 실수/정수
System.out.println(3 / 4.0);		// 0.75		<-- 정수/실수
		
// 수동 형변환
double x = 3.14;
float l = (float)x;		// double타입의 값을 float타입의 값으로 형변환 후 l에 대입한다.
long m = (long)x;		// double타입의 값을 long타입의 값으로 형변환 후 m에 대입한다
int n = (int)x;			// double타입의 값을 int타입의 값으로 형변환 후 n에 대입한다
System.out.println("x의 값 : " + x);
System.out.println("l의 값 : " + l);
System.out.println("m의 값 : " + m);
System.out.println("n의 값 : " + n);
		
// 평균 계산하기
int kor = 70;				// 국어점수
int eng = 100;				// 영어점수
int math = 74;				// 수학점수
int subjectCount = 3;			// 과목 수
		
// 소숫점 없는 평균값
int average = (kor + eng + math) / subjectCount; 		// 정수 <- (정수+정수+정수)/정수
								// 81
		
// 소숫점 있는 평균값
double average2 = (kor + eng + math) / subjectCount; 		// 실수 <- 정수 <- (정수+정수+정수)/정수
								// 81.0 <- 81
		
// 소숫점 있는 평균값
double average3 = (kor + eng + math) / (double)subjectCount; 	// 실수 <- 정수 <- (정수+정수+정수)/정수
								// 81.33333333
		
System.out.println("소숫점이 없는 평균값: " + average);
System.out.println("소숫점이 있는 평균값: " + average2);
System.out.println("소숫점이 있는 평균값: " + average3);
				
// 문자와 정수간의 형변환
// int -> char
// 정수 65에 해당하는 유니코드문자가 변수에 저장된다.
//						유니코드문자	16진수	   10진수
char ch1 = 65;			// A	<-	\u0041	<-	0x41	<- 65
char ch2 = 44032;		// 가	<-	\uac00	<-	0xac00	<- 44032
		
System.out.println(ch1);
System.out.println(ch2);
		
System.out.println((char) 65);	// int	-> char
System.out.println((int) 'A');	// char -> int

연산자

연산자란?

어떠한 기능 또는 어떤 대상체에 계산과 같은 처리를 수행하는 문자 또는 기호라고 볼 수 있습니다. Java에서의 연산자는 크게 단항, 이항, 삼항, 대입 연산자로 나뉘며, 이항 연산자는 산술, 비교, 논리 연산자로 나뉠 수 있습니다.

  • 연산자(operator) : 어떠한 기능을 수행하는 기호 (ex +, -, *, / 등)

  • 피연산자(operand) : 연산자의 작업 대상 (ex 변수, 상수, 수식 등)

출처: https://toma0912.tistory.com/66 [토마의 개발노트]

사칙연산자

// 사칙연산자
		
int num1 = 1;
int num2 = 2;
double num3 = 3.0;
double num4 = 4.0;
		
System.out.println(num1 + num2); // 7
System.out.println(num1 - num2); // -1
System.out.println(num1 * num2); // 12
System.out.println(num1 / num2); // 0		정수/정수는 결과도 정수다
System.out.println(num3 / num4); // 0.75	실수/실수는 결과도 실수다
System.out.println(num1 % num2); // 3
		
// 실수끼리의 연산은 예상과 다른 연산결과가 나올 수 있음
// 실수에 10의 배수를 곱해서 정수로 만든 후 계산을 수행하고, 다시 10의 배수로 나눈다.
double num5 = 0.1;
double num6 = 0.2;
System.out.println(num5 + num6); 				// 0.30000000000000004
System.out.println((num5*10 + num6*10)/10);		// 0.3

대입연산자

// 대입 연산자
// = += -= *= /= %=
// 연산자 중에서 우선순위가 가장 낮은 연산자다.
int num1 = 10;
	
num1 += 1;		// num1 = num1 + 1
num1 += 1;
num1 += 1;
System.out.println(num1);
		
num1 += 5;		// num1 = num1 + 5
num1 += 5;
num1 += 5;
System.out.println(num1);
		
num1 -= 10;		// num1 = num1 - 10
num1 -= 10;
System.out.println(num1);

증감연산자

// 증감 연산자
// ++ --
int num1 = 10;

num1++;
num1++;
num1++;
System.out.println(num1);

++num1;
++num1;
++num1;
System.out.println(num1);

// 증감연산자를 다른 연산자와 같이 사용하는 경우 연산자를 붙이는 위치에 따라서 결과값이 달라진다.
// 증감연산자를 다른 연산자와 같이 사용하지 말라. 가독성이 엄청 떨어진다
int num2 = 100;
int num3 = 100;
		
int x = ++num2;		// num2의 값을 1 증가시킨 후 x에 대입한다.
int y = num3++;		// num3의 값을 y에 대입한 후 num3의 값을 1증가시킨다.
		
System.out.println(x); // 101이 출력됨
System.out.println(y); // 100이 출력됨
		
// 증감식과 다른 연산자를 분리해서 코딩한다.
int num4 = 300;
int num5 = 300;
		
num4++;
++num5;

int l = num4;
int m = num5;
		
System.out.println(l);
System.out.println(m);

비교연산자

// 비교 연산자
// > >= < <= == !=
int x = 3;
int y = 4;
		
System.out.println(x > y);		// x의 값이 y의 값보다 큰가?			false
System.out.println(x >= y);		// x의 값이 y의 값보다 크거나 같은가? 		false
System.out.println(x < y);		// x의 값이 y의 값보다 작은가?			true
System.out.println(x <= y);		// x의 값이 y의 값보다 작거나 같은가?		ture
System.out.println(x == y);		// x의 값이 y의 값이 같은가?			false
System.out.println(x != y);		// x의 값이 y의 값지 않은가?			ture
		
int a = 4000;
// a의 값이 1000이상 5000이하인가?
// System.out.println(1000 <= a <= 5000); <-- 이렇게 못씀
System.out.println(1000 <= a && a <= 5000); // 이게 맞음
		
// 유상수리 여부를 확인해보기
// 주행거리가 10만km 이상인 경우 유상수리를 한다
// 사용기간이 3년 이상인 경우 유상수리를 한다.
// 2가지 조건 중 하나라도 충족되면 유상수리를 한다.
int distance = 50000;
int usedYear = 4;
		
// 주행거리가 규정거리 이상인가?
// 사용기간이 규정기간 이상인가?
boolean result1 = distance >= 100000;
boolean result2 = usedYear >= 3;
System.out.println(result1);
System.out.println(result2);
System.out.println("최종 판정");
System.out.println(result1 || result2);

논리연산자

// 논리 연산자
// && || !
// 둘 이상의 비교 연산 결과를 합쳐서 최종 결과를 획득할 때 사용되는 연산자다.(!은 제외)
// 논리연산자의 좌항/우항에는 불린값이 오거나, 식의 연산결과가 불린값인 것만 위치할 수 있다.
		
// 자동차 유상거리 판정하기
// 주행거리가 10만km 이상이거나 사용기간이 3년 이상인 차량은 유상수리 대상이다.
// 논리합
int distance = 50000;
int usedYear = 2;
		
boolean result1 = distance >= 100000 || usedYear >= 3;
System.out.println("유상수리 여부 판정 결과 : " + result1);
		
// 사은품 지급 기준
// 고객의 등급(1, 2, 3 등급이 있음)이 2등급보다 높거나 같고, 구매금액이 10만원 이상인 경우 사은품 지급 대상이다.
// 논리곱
int grade = 3;
int orderPrice = 500000;
boolean result2 = grade <= 2 && orderPrice >= 100000;
System.out.println("사은품 지급 여부 판정결과 : " + result2);
		
// 장학금 지급 기준
// 국어, 영어, 수학점수의 평균이 90점 이상이고, 국어 점수가 95점 이상인 경우 장학금 지급 대상이다.
int kor = 94;
int eng = 90;
int math = 92;
double evg = (kor + eng + math)/3;
		
boolean result3 = evg >= 90 && kor >= 95;
System.out.println("장학금 지급 대상 결과 : " + result3);
		
// 포인트 지급 기준
// 구매횟수가 10회 이상이거나, 당일 구매금액이, 100만원 이상인 경우 포인트 지급 대상이다.
int orderCount = 10;
int todayOrderPrice = 5555555;;
		
boolean result4 = orderCount >= 10 || todayOrderPrice > 1_000_000;
System.out.println("포인트 지급 대상 결과 : " + result4);

조건연산자

// 조건 연산자(3항 연산자)
// 조건식 ? 값1 : 값2
// 조건식이 true로 판정되면 값1이 최종결과가 됨
// 조건식이 false로 판정되면 값2가 최종결과가 됨
// 값1과 값2의 데이터타입이 동일해야 한다.
		
// 시험성적이 60점 이상이라면 합격, 그 외는 불합격이다.
int score = 80;
String result1 = score >= 60 ? "합격" : "불합격";
System.out.println("최종결과 : " + result1);
		
// 구매금액이 30만원 이상이라면 적립포인트를 3% 적립, 그 외는 1% 적립한다.
int orderPrice = 100000;
double point = orderPrice >= 300000 ? orderPrice * 0.03 : orderPrice * 0.01;
System.out.println("적립포인트 : " + point);

Scanner

import java.util.Scanner;

public class Example1 {
	public static void main(String[] args) {
		// System.in은 표준입력장치다.
		// 시스템에서 표준입력장치는 키보드를 말한다.
		
		// Scanner sc는 Scanner 설계도로 만든 객체의 주소값을 담는 변수 sc를 생성한다.
		// new Scanner(System.in)은 표준입력장치로 입력하는 내요을 읽어오는 Scanner객체를 생성한다.
		// Scanner sc = new Scanner(System.in)은 
		// 	표준입력장치로 입력한 내용을 읽어오는 Scanner 객체를 생성한 후,
		//	그 객체의 주소값을 sc에 대입하라
		// sc는 생성된 객체의 공개된 속성과 기능을 사용할 떄 필요한 리모콘 역할을 수행한다
		// sc를 통해서만 생성된 객체에 접근 / 사용할 수 있다.
		// sc.nextInt(); sc.next(); sc.nextDouble(); sc.nextLine() 등의 수행문으로
		// 입력된 값을 읽어올 수 있다.
		Scanner sc =new Scanner(System.in);
		
		System.out.printf("이름을 입력하세요 : ");
		String value = sc.nextLine();
		
		System.out.printf("나이를 입력하세요 : ");
		String value2 = sc.nextLine();
		
		System.out.println("입력된 이름 : " + value);
		System.out.println("입력된 나이 : " + value2);
	}
}

ETC

정보처리기사 준비하기

코딩테스트 사이트
https://programmers.co.kr/
https://www.acmicpc.net/

profile
게으르고 싶은 예비 개발자입니다.

0개의 댓글