TIL 0219

먼지·2024년 2월 19일

Today I Learned

목록 보기
2/89
post-thumbnail

📜 printf 실습(2)

		//데이터의 종류가 여러개일 경우
		System.out.printf("%s는 %d점입니다.%n", "점수", 98);
		//점수 -> %S(문자열), 98 -> %d(정수)
		System.out.printf("중간고사 성적은 총점 %d, 평균 %d입니다.%n", 284, 95);
		//포맷문자는 어차피 문자열로 나오기 때문에 굳이 %s를 쓰지 않아도 괜찮다. 
		//%d가 여러개 쓰일때는 순서에 맞춰서 쓰면 된다.
		//줄 바꿈을 하려면 포맷 문자의 맨 마지막에 %n을 넣어주면 된다.

실행 결과

📜printf 이용하여 성적표 만들기

System.out.printf()를 이용하여 아래와 같이 출력하시오.

성적표
국어 : 98점
영어 : 97점
총점 : 195점
평균 : 97.5점
public class PrintMain06 {

	public static void main(String[] args) {
		
		//1번 방법
		System.out.printf("%s : %d점%n", "국어", 98);
		System.out.printf("%s : %d점%n", "영어", 97);
		System.out.printf("%s : %d점%n", "총점", 195);
		System.out.printf("%s : %.1f점%n", "평균", 97.5); 
        //실수이기 때문에 %d가 아닌 %f를 써야한다. 
        //그리고 소수점 첫째자리까지 나타내면 되기 때문에 %.1f가 된다.
		System.out.println("----------------------");
		
		//2번 방법
		System.out.printf("국어 : %d점%n", 98);
		System.out.printf("영어 : %d점%n", 97);
		System.out.printf("총점 : %d점%n", 195);
		System.out.printf("평균 : %.1f점%n", 97.5);
		System.out.println("----------------------");
		
		//3번 방법
		System.out.printf("국어 : %d점%n영어 : %d점%n총점 : %d점%n평균 : %.1f점%n",
        98,97,195,97.5);
		
	}

}

실행 결과

📜 printf 이용하여 출력하기

유재석은 은행 계좌를 가지고 있다. 계좌에 1,000원이 예금되어 있는데
오늘 325원을 송금받아서 잔고가 1,325원이 되었다.
특별이자율은 0.3이 적용되어 내일 이자 397.5원을 받는다.

예금자, 송금되기전 잔금, 송금된 금액, 송금이후 잔금, 내일 입금될 이자를 출력하시오.

public class PrintMain07 {

	public static void main(String[] args) {
		
		//1번 방법
		System.out.printf("예금자는 %s이다.%n송금되기전 잔금은 %,d원이다.
        %n송금된 금액은 %d원이다.%n"
		+ "송금이후 잔금은 %,d원이다.%n내일 입금될 이자는 %.1f원이다.%n", 
		"유재석", 1000, 325, 1325, 397.5);
		System.out.println("-------------------------");
		
		//2번 방법
		System.out.printf("예금자는 %s이다.%n", "유재석");
		System.out.printf("송금되기 전 잔금은 %,d원이다.%n",1000);
		System.out.printf("송금된 금액은 %d원이다.%n", 325);
		System.out.printf("송금 이후 잔금은 %,d원이다.%n", 1325);
		System.out.printf("내일 입금될 이자는 %.1f원이다.%n", 397.5);

	}

}

실행 결과

🪪 식별자 Identifier

식별자란?

  • 자바 코드 내에서 개발자가 사용한 이름을 식별자라고 한다.
    ex) 클래스 이름, 변수 이름, 메서드 이름 지정할 때 사용

식별자 명명규칙
1) 영문자와 숫자와 '-' , '$' 의 조합
2) 첫 글자는 반드시 영문자나 '_' 로 시작한다. 숫자 시작 불가능
3) 식별자는 대소문자를 철저히 구분한다.
4) 자바에서 사용되는 예약어는 식별자로 사용이 불가능하다
5) 상수 값을 표현하는 단어 true, false, null은 식별자로 사용이 불가능하다.

세부 식별자 정의 규칙

구분정의 규칙사용 예시
클래스- 첫 문자는 항상 대문자로 표현
- 하나 이상의 단어가 합쳐질 때는 각 단어의 첫 문자들만 대문자로 표현
class JavaTest{…;}
변수와 메서드- 첫 문자는 항상 소문자로 표현
- 하나 이상의 단어가 합쳐질 때는 두 번째부터 오는 단어의 첫 문자들만 대문자로 표현
String itLand; public void getTest(){…;}
상수- 모든 문자를 대문자로 표현
- 하나 이상의 단어가 합쳐질 때는 공백 필요시 under score(_)를 사용하여 연결한다.
final int JAVATEST = 10; final int JAVA_TEST = 20;

✨ 변수 Variable

  • 값을 담아두는 기억 공간 [메모리 공간]
  • 데이터를 저장할 수 있는 그릇과 같음
  • 하나의 데이터 값을 저장할 수 있음
  • 정해진 값은 고정되어 있지 않고 계속 변할 수 있음
  • 저장되는 데이터에 따라 변수의 자료형(Data Type)이 결정됨

📜 변수 실습 01

public class VariableMain01 {

	public static void main(String[] args) {
		//변수(Variable)는 값을 저장할 수 있는 메모리의 공간
		
		//변수 선언
		//int -> 데이터의 종류 : 정수 		num -> 변수명
		int num;
		
		//변수의 초기화
		//num이 가리키는 메모리 공간에 8을 저장한다.
		num = 17;
		
		//변수의 값 출력하기
		System.out.println(num);
		System.out.println("---------------");
		
		//변수 선언, 초기화
		int number = 20;
		System.out.println(number);
		
		//데이터 변경
		number = 40;
		
		//출력
		System.out.println(number);
		
		//주의사항
		//동일한 변수명으로 변수를 선언하면 오류 발생 - 동일한 변수명으로 변수 선언 불가!
		//int number = 30;
		
		System.out.println("---------------");
		
		//동일한 자료형을 사용하기 때문에 두번째 변수명 앞의 자료형은 생략 가능함
		//int a = 10;
		//int b = 20;
		int a = 10, b = 20;
		int result = a + b; //여기의 +는 연산
		//=> result = 10 + 20 = 30
		System.out.println("result = " + result); // 여기의 +는 연결 
		
		//숫자 + 숫자 => 연산
		//문자열 + 숫자 => 연결
		//숫자 + 문자열 => 연결
		//문자열 + 문자열 => 연결
		
		System.out.printf("result = %d%n", result);
		
		//주의사항
		System.out.println("결과 : " + a + b); // 연결
		System.out.println("결과 : " + (a + b)); //연산
		
		//변수 선언
		int no;

		//변수 선언 후 출력 또는 연산하기 전에 반드시 초기화를  해야 함
		//System.out.println(no);

		
	}

}

실행 결과

📜 변수 실습 02

실습
정수를 담을 수 있는 변수를 3개 지정한다.
변수명은 각각 a,b,c 라고 지정하고 원하는 정수로 초기화 한다.
a + b 연산 후 출력

출력 예시
결과(a+b) =50 형식으로 출력한다.
c에 저장된 데이터를 80으로 변경해서
c = 80 형식으로 출력한다.
public class VariableMain02 {

	public static void main(String[] args) {
		
		int a = 10, b = 20, c = 30 ;
		
		int result = a + b;
		
		//1번 방법
		System.out.println("결과  = " + result);
		System.out.println("------------------------" );
		//2번 방법
		System.out.println("결과  = " + ( a + b));
		System.out.println("------------------------" );
		//3번 방법
		System.out.printf("결과 = %d%n", a + b);
		System.out.println("------------------------" );
	
		c = 80;
		//1번 방법
		System.out.println("c = " + c);
		//2번 방법
		System.out.printf("c = %d%n", c);

	}

}

실행 결과

🆎 자료형

  • 기본 자료형 (Primitive data type)

    • 자바 컴파일러에 의해서 해석되는 자료형

  • 참조 자료형 (Reference data type)

    • 자바 API에서 제공되거나 프로그래머에 의해서 만들어진 클래스를 자료형으로 선언하는 경우
      클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입

🆎 기본 자료형 실습

  • 논리형 (boolean)
	//논리형 (true , false)
	System.out.println("------논리형------");
	boolean b = true;
	System.out.println("b = " + b );
  • 문자형 (char)
//문자형, 크기 : 2 byte (16bit)
//다국어 처리를 위한 유니코드(unicode) 방식을 사용함
//문자코드 => 유니코드는 16진수를 사용하여 나타낸다.
//유니코드 안에 아스키코드가 포함되어 있다. 
//한글은 유니코드로만 명시 가능함
//아스키코드는 10진수를 사용한다. 

System.out.println("------문자형------");
		char c1 = 'A'; 
		System.out.println("c1 = " + c1);
		
		char c2 = 65; 
		System.out.println("c2 = " + c2);
		
		char c3 = '\u0041'; 
		System.out.println("c3 = " + c3);
		
		char c4 = '자';
		System.out.println("c4 = " + c4);
		
		char c5 = '\uc790';	
		System.out.println("c5 = " + c5);
		System.out.println();
  • 정수형 ( byte, short, int, long ) [기본: int]
System.out.println("------정수형------");
//byte , 크기 : 1 byte 
	byte b1 = 127;
	System.out.println("b1 = " + b1);
		
//short , 크기 : 2 byte
	short s1 = 32678;
	System.out.println("s1 = " + s1);
		
//int, 크기 : 4 byte 
	int i1 = 1234;
	System.out.println("i1 = " + i1);
		
//long , 크기 : 8 byte 
	long lg = 1234L;
	System.out.println("lg = " + lg);
  • 실수형 ( float, double) [기본: double]
	System.out.println("------실수형------");
	//float , 크기 : 4 byte
	float f1 = 9.1f;
	System.out.println("f1 = " + f1);
		
	//double , 크기 : 8 byte
	double du = 9.8;
	System.out.println("du = " + du);

📌 참조 자료형 실습

  • 문자열 표시
	System.out.println("------문자열 표시------");
	//문자열 표시 (기본자료형이 아님, 참조자료형)
	String str = "Hello World!!";
	System.out.println("str = " + str);
		

실행 결과

➕ 확장 특수 문자 출력 (Escape Sequence)

종류의미
\a경고음이 난다
\n엔터 키의 기능을 한다. 줄 바꿈
\t수평 탭으로 일정한 간격을 띄운다.
\b백스페이스로 뒤로 한 칸 후진한다.
\r동일한 줄의 맨 앞 칸으로 커서만 옮긴다.
\f출력 용지를 한 페이지 넘긴다.
\\\문자를 의미한다
\'' 문자를 의미한다 (single quote)
\"" 문자를 의미한다 (double quote)
\0널문자를 의미한다 (null)
\u16진수16진수에 해당하는 유니코드

➕ 확장 특수 출력 문자 실습 (Escape Sequence)

public class VariableTypeMain02 {

	public static void main(String[] args) {
		
	//확장 특수 출력 문자 ( Escape Sequence )
	// \을 붙여 표현하면 일반 문자로 변환된다.
	char single = '\'';
	System.out.println(single);
		
	// \을 붙여 표현하면 일반 문자로 변환된다.
	String str1 = "오늘은 \"월요일\"입니다.";
	System.out.println(str1);
		
	//문자열 '를 표시하면 자동으로 일반 문자로 변환됨
	String str2 = "오늘은'서울'에 비가 와요!";
	System.out.println(str2);
		
	// 경로 나타낼 때 역슬래쉬를 한 번 더 써줘야 나타난다.
	String str3 ="C:\\javaWork\\workspace";
	System.out.println(str3);
		
	// \n : 엔터 키의 기능을 갖는다. 줄을 바꾼다.
	String str4 = "오늘은 월요일 \n내일은 화요일";
	System.out.println(str4);
		
	// \t : 수평 탭으로 일정한 간격을 띄운다.
	String str5 = "이름\t나이\t취미";
	System.out.println(str5);
		
	}

}

실행 결과

🔃 형변환

  • 데이터나 변수의 자료형을 다른 자료형으로 변환시키는 것
  • 자바의 데이터는 서로 같은 자료형일 때 연산이 가능하다.
  • 서로 다른 자료형들은 같은 타입으로 변경시킨 후 연산 가능하다.
  • 기본형과 참조형은 모두 형변환이 가능하다.
    • 기본형은 기본형끼리, 참조형은 참조형끼리 형변환 가능하다.
  • boolean은 true와 false만을 저장하기 위해 특별히 만들어진 데이터 타입이므로 형변환이 불가능하다.
  • 명시적 형변환과 묵시적 형변환으로 나뉜다.

1) 묵시적 형변환 (자동 형변환)

  • 프로그램 실행 도중 자동으로 일어나는 형변환
  • 작은 타입을 큰 타입으로 변수에 할당하면 자동으로 변환
  • 자동 형변환이 발생하면 변환 이전의 값과 변환 이후 값이 동일

2) 명시적 형변환 (강제 형변환)

  • [데이터 타입][데이터 또는 변수]
  • 넓은 범위를 표현 가능한 큰 타입의 데이터를 좁은 범위를 표현 가능한 작은 타입으로 형변환 할 때에는 명시적으로 형변환을 해야 함

🔃 형변환 실습

  • 묵시적 형변환 (자동 형변환)
	System.out.println("====묵시적 형변환 (자동 형변환)====");
	// 더 큰 자료형으로 승격이 일어나는 형태
	// 정보의 손실이 전혀 없으면 자동적으로 발생
	byte b1 = 127;
	byte b2 = 127;
	//32bit미만 byte형 데이터를 연산하면 자동으로 32bit로 변환
	int result1 = b1 + b2;
	System.out.println("result1 = " + result1);
		
	short s1 = 32767; 
	short s2 = 32767;
	//32bit미만 short형 데이터를 연산하면 자동으로 32bit로 변환
	int result2 = s1 + s2;
	System.out.println("result2 = " + result2);
		
	int in1 = 1234;
	long lg1 = 5678L;
	long result3 = in1 + lg1; 
    // in1:  int-> long 자동적으로 형변환
	System.out.println("result3 = " + result3);
		
	int in2 = 245;
	double du1 = 98.2;
	double result4 = in2 + du1; 
    // in2: int -> double 자동적으로 형변환
	System.out.println("result4 = " + result4);

실행 결과

  • 명시적 형변환 (강제 형변환)
	System.out.println("====명시적 형변환 (강제 형변환)====");
	//더 작은 자료형으로 강등이 일어나는 형태, 정보의 손실이 발생할 수 있음.
	byte b1 = 127;
	byte b2 = 127;
	// 자동적으로 int형으로 형변환된 것을 다시 byte로 강제 형변환
	// 강제 result1 = -2
	byte result1 = (byte) (b1 + b2);
	System.out.println( "result1 = "+ result1);
		
	short s1 = 32767;
	short s2 = 32767;
	short result2 = (short)(s1 + s2);
	System.out.println("result2 = " + result2);
    
	float f1 = 3.14f;
	int in1 = 15;
	//f1 : float -> int 강제 형변환
	int result3 = (int)f1 + in1;
	System.out.println("result3 = " + result3);
		
	long lg1 = 1234L;
	int in2 = 59;
	//lg1 : long -> int 강제 형변환
	int result4 = (int)lg1 + in2;
	System.out.println("result5 = " + result4

🔢 연산자

  • 자료의 가공을 위해 정해진 방식에 따라 계산하고 결과를 얻기 위한 기호
종류연산자우선 순위
증감 연산자++, --1순위
산술 연산자+, -, *, /, %2순위
시프트 연산자>>, >>>, <<3순위
비교 연산자<, >, >=, <=, ==, !=4순위
비트 연산자&, | , ^ , ~~만 1순위, 나머지는 5순위
논리 연산자&&, || , !!만 1순위, 나머지는 6순위
조건(삼항) 연산자?, :7순위
대입 연산자=, +=, -=, *=, /=, %=8순위
  • 증감 연산자

    • 1씩 증가 또는 1씩 감소시키는 연산자
      • ++ : 1씩 증가시킴
      • -- : 1씩 감소시킴
  • 산술 연산자

    • + : 덧셈
    • - : 뺄셈
    • * : 곱셈
    • / : 나누기 ( 몫 구하기 )
    • % : 나누기 ( 나머지 구하기 )

🔢 연산자 실습

  • 증감 연산자
	public static void main(String[] args) {
		
		System.out.println("===증감연산자===");
		
		System.out.println("--------------------");
		//증가연산자
		
		int i = 5; //변수 선언 후 초기화 상태
		//증가연산자를 변수 앞에 명시하면 변수의 값을 1 증가시킨 후에 증가된 값을 읽어온다.
		System.out.println(++i); //6
		System.out.println("--------------------");
		
		//증가연산자를 변수명 뒤에 명시하면 변수 값을 우선 읽어온 후에 값을 1 증가시킨다.
		System.out.println(i++); //6
		//i값을 먼저 불러와서 6이라고 출력
		// 그러나 메모리 공간에 1이 증가된 값으로 들어가서 i를 한 번 더 출력.
		 System.out.println(i); // 7이 출력된다.
		 
		 System.out.println("--------------------");
		 //감소연산자
		 
		 int j = 10;
		 //감소연산자를 변수명 앞에 명시하면 변수값을 1 감소시킨 후 감소된 값을 읽어옴
		 System.out.println(--j); //9
		 
		 System.out.println("--------------------");
		 //감소연산자를 변수명 뒤에 명시하면 변수 값을 우선 읽어온 후에 값을 1 감소시킨다.
		 System.out.println(j--); //9
		 System.out.println(j); //8
		 
		 
	}

실행 결과

📜 연산자 이용하여 성적표 출력하기

변수 선언시 자료형은 모두 int로 지정한다.
변수 korean, english, math 를 선언하고 90,95,88로 초기화한다.
총점을 구해서 변수 sum에 저장하고 평균을 구해서 변수 avg에 저장하시오.

성적표
국어 : 90점
영어 : 95점
수학 : 88점
총점 : ? 점
평균 : ? 점

public class OperatorMain03 {

	public static void main(String[] args) {
		
		int kor = 90, eng = 95 , math = 88;
		int sum = kor + eng + math;
		int avg = sum / 3;
		
		System.out.println("국어 : " + kor + "점");
		System.out.println("영어 : " + eng + "점");
		System.out.println("수학 : " + math + "점");
		System.out.println("총점 : " + sum + "점");
		System.out.println("평균 : " + avg + "점");

	}

}

실행 결과

📒 연산자 숙제

534자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어 줄 때 학생당 몇 개를 가질 수 있고 최종적으로 몇 개가 남는지를 구하시오.

[출력 예시]
학생 한 명이 가지는 연필 수 : ??
남은 연필 수 : ??
public class OperatorMain04 {

	public static void main(String[] args) {
		int pen = 534;
		int student = 30;
		int one = pen / student;
		int leftover = pen % student;
		
		System.out.println("학생 한 명이 가지는 연필 수 : " + one);
		System.out.println("남은 연필 수 : " + leftover);
	}

}

실행 결과

profile
Lucky Things🍀

0개의 댓글