1. 식별자 원칙

식별자란?

  • 클래스, 변수, 상수, 메소드 등에 붙이는 원칙이다.

식별자의 원칙

  1. @, #, ! 와 같은 특수문자 사용 불가
  2. 공백 불가
  3. 미리 정의된 키워드(예약어)는 식별자로 사용 불가
  4. 숫자 사용 가능(단, 첫글자로는 사용 불가)

자주쓰이는 자바의 예약어는 아래와 같으니 참고하면 될 것 같다.

2. 데이터 타입

  • 자바는 강한 타입언어로, JS와 달리 데이터 타입이 매우 중요하다!
    데이터 타입은 크게 기본 타입(Primitive)레퍼런스 타입(참조형, Reference)이다.

기본형 데이터 타입


📌 실수형 타입(float, double) 등의 기본 부동소수점 자료형은 근사값을 사용하므로 금융 계산과 같은 정밀도가 중요한 연산에는 적합하지 않다.
이때 BigDecimal 클래스는 정확한 소수점 연산을 제공한다.
BigDecimal : 불변 객체로 한번 생성되면 그 값을 변경할 수 없다. 기본 산술연산자(+,-,*./)를 직접 이용할 수 없고 메서드를 사용하면 된다.
사용하려면 import java.math.BigDecimal;를 추가해줘야한다.

import java.util.Scanner; //뒤에서 이에 관련 내용 작성함
import java.math.BigDecimal;


public class Prac2 {
	public static BigDecimal add(BigDecimal a, BigDecimal b) {
        return a.add(b);
    }

    public static BigDecimal subtract(BigDecimal a, BigDecimal b) {
        return a.subtract(b);
    }

    public static BigDecimal multiply(BigDecimal a, BigDecimal b) {
        return a.multiply(b);
    }

    public static BigDecimal divide(BigDecimal a, BigDecimal b) {
        return a.divide(b);
    }

	public static void main(String[] args) {
		System.out.println("숫자를 두개를 입력하세요 ");
		Scanner scan = new Scanner(System.in);
		
		int a = scan.nextInt();
		int b = scan.nextInt();
		
		BigDecimal number1 = new BigDecimal(a);
	    BigDecimal number2 = new BigDecimal(b);
	     
	    System.out.println("더하기: " + add(number1, number2));
	    System.out.println("빼기: " + subtract(number1, number2));
	    System.out.println("곱하기: " + multiply(number1, number2));
	    System.out.println("나누기: " + divide(number1, number2));
		
		
		
		scan.close();
	}

}

BigDecimal 클래스 에러

-> 그런데 BigDecimal 클래스는 정확한 소수점 연산을 제공하기 때문에 만약 a,b에 1,3과 같은 숫자를 입력하게 되면 아래와 같은 에러가 발생한다.

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
	at java.base/java.math.BigDecimal.divide(BigDecimal.java:1780)

-> 나눗셈 메서드를 사용할때 발생한 문제인데, 나눗셈의 결과가 무한 소수점 확장을 가지거나, 이를 정확하게 10진수로 표현할 수 없을 때 발생한다. 1을 3으로 나누려고 할 때도, 0.3333...과 같이 끝이 없는 소수점 결과가 나오기 때문에 에러가 발생한 것이다.

--> 이때는 근사값을 얻거나, 결과의 소수점 이하 자릿수를 제한해야한다.

import java.math.BigDecimal;
import java.math.RoundingMode;

// 결과를 소수점 이하 2자리까지 표현하고, 반올림 모드를 HALF_UP(가장 가까운 숫자로 반올림)으로 설정
        BigDecimal result = a.divide(b, 2, RoundingMode.HALF_UP);

참조형 데이터 타입

  • 기본형 타입을 뺀 모든 형태를 참조형 타입으로 본다.
    크게 아래 세 가지로 구분할 수 있다.
    (1) 배열에 대한 레퍼런스
    (2) 클래스에 대한 레퍼런스
    (3) 인터페이스에 대한 레퍼런스

3. Scanner

  • 입력을 담당하는 기능으로, System.in에게 키를 읽게 하고, 읽은 값을 String, int, double, boolean, char 등 다양한 타입으로 변환하여 리턴한다.
  • 입력되는 키 값을 공백(\n, \t, )으로 구분되는 아이템 단위로 읽는다.
import java.util.Scanner; //import문이 필요하다.

Scanner scan = new Scanner(System.in); //Scanner 객체 생성

Scanner 클래스의 주요 메소드

next() : 공백 이전까지의 문자열을 읽는다.
nextLine() : 엔터(\n) 이전까지의 문자열을 읽는다.
• next자료형()
nextInt() : 공백 이전까지의 정수를 읽는다.
nextDouble() : 공백 이전까지의 실수를 읽는다.
• nextBoolean(), nextFloat(), ..etc
close() : scanner 닫는 기능을 한다.

import java.util.Scanner;

public class Scan {

	public static void main(String[] args) {
		System.out.println("이름, 나이, 키, 결혼 여부를 빈칸으로 분리하여 선택하시오 ");
		
		Scanner scan = new Scanner(System.in);
	//System.in : 표준 입력 스트림을 나타내며, 주로 키보드 입력을 위해 사용
	
		String name = scan.next();//공백 이전까지의 문자열 읽기
		int age = scan.nextInt(); //공백 이전까지의 정수 읽기
		double height = scan.nextDouble(); //공백 이전까지의 실수 읽기
		boolean isMarry = scan.nextBoolean(); //공백 이전까지의 논리값 읽기 
		
		System.out.printf("이름은 %s, 나이는 %d, 키는 %.1fcm, 결혼은 %b",name,age,height,isMarry);
	 
	
		scan.close();
	}

}

4. 조건문

if문

이전에 배웠던 언어에서 문자열을 비교할땐 if(name === "룰루") 라고 했다면, 자바에선 if(name.equals("룰루")) 이렇게 해줘야한다.
그리고 문자열을 JS에선 홑따옴표('')로 해도 문제없었지만, 자바는 무조건 쌍따옴표("")로 해야한다.

switch 문

  • if문과 형태는 비슷하다. if-else구조가 아닌 case-default 구조일뿐!

예시


import java.util.Scanner;

public class Condition {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		// 숫자 예
        System.out.println("수를 입력하세요");
		int num = scan.nextInt();

		// if-else문
	   if(num % 3 == 0) {
		   System.out.println("3의배수입니다.");
		   
	   }else {
		   System.out.println("3의 배수가 아닙니다.");
		   
	   }

		// switch 문
		switch(num%3) {
		case 0 :
			System.out.println("3의 배수입니다.");
			break;
		default:
			System.out.println("3의 배수가 아닙니다.");
		}

		// 문자열 비교(위의 if, switch 문 모두 주석처리하고 실행)
		System.out.println("이름을 입력하세요.");
		String name = scan.nextLine(); // 엔터이전까지 문자열 읽음

		if (name.equals("홍길동")) {
			System.out.println("홍길동님 환영합니다.");

		} else {
			System.out.printf("%s님 환영합니다.", name);
		}
		scan.close();

	}

}

5. 반복문

  • JS에서 배운거랑 별반 다를거 없다!
public class Loof {

	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
		int i = 0;
		while (i < 5) {
			System.out.println("i = " + i);
			i++;
		}

	}

}
//println으로 출력해서 문단띄어쓰기가 되어있다.
0
1
2
3
4
5
6
7
8
9
i = 0
i = 1
i = 2
i = 3
i = 4

6. 메소드

메소드 선언

반환 값이 없는 경우

반환 값이 있는 경우

메소드 오버로딩

  • 한 클래스 내에서 동일한 이름의 메소드를 여러 개 정의하는 것이다.
  • 이때 각 메소드는 매개변수의 타입, 개수, 순서가 달라야한다.
public class Over {
	
	//메소드 오버로딩
	//정수 두개를 더하는 오버로딩
    //add라는 메소드 이름은 동일하나, 매개변수 타입이나 개수, 순서가 다른 것을 확인할 수 있다.
	public int add(int a, int b) {
		return a + b;
		
	}
	//실수 두개를 더하는 메소드
	public double add(double a, double b) {
		return a+ b;
		
	}
	//정수 세개를 더하는 메소드
	public int add(int a, int b, int c) {
		return a + b+ c;
		
	}

	public static void main(String[] args) {
		//실행되는건 main 아래
		Over calc = new Over();
		System.out.println(calc.add(10, 30));
		System.out.println(calc.add(5.3, 7.2));
		System.out.println(calc.add(10, 100,1000));
		
		

	}

}
profile
중요한 건 꺾여도 다시 일어서는 마음

0개의 댓글