Programming/JAVA

[JAVA] 변수 / 식별자 / 자료형 / next() / nextLine()

Jayna. 2023. 12. 20. 15:11
728x90

 


>> 변수를 사용하는 이유
 1. 변수는 값에 의미를 부여하기 위해 사용
 2. 단 한번의 값을 기록함으로써 재사용이 가능 => 재사용성을 높여줌
 가독성과 재사용이 높아짐으로써 유지보수가 용이해짐

 

>> 변수 선언 방법

 int pay;
 변수 타입(자료형) 변수이름;
 같은 타입의 변수를 선언할 때는 한꺼번에 선언할 수 있음 ex) int pay, day, time;
 변수를 선언하고 난 뒤에 처음 값을 저장하는 것을 초기화(initialization)라고 함.
 초기화를 진행하여 넣어준 값을 초기값이라고 함.

>> 식별자(Identifier)
        식별자는 클래스명, 메소드명, 변수명 등 사용자가 만들어서 이용하는 고유한 이름
        - 식별자를 생성할 때 꼭 지켜야 하는 규칙(안 지키면 안 만들어짐)
        1. 대, 소문자를 구분해야 함. 길이 제한은 없음
        2. 문자, 숫자, _ , $ 를 식별자에 포함할 수 있음
        3. 문자, _ , $ 로 시작할 수 있음 (숫자로는 시작 X)
        4. 공백은 포함할 수 없음
        5. 키워드(예약어)는 식별자로 사용할 수 없음


        - 식별자 이름 규칙(개발자들의 약속)
        1. 클래스 / 인터페이스 이름 규칙
        : 명사, 형용사를 서술적으로 연결해서 사용
        : 첫글자는 대문자로 표기
        : 연결된 단어들도 대문자로 표기
        ex) HelloWorld, MethodTest
        2. 변수 이름 규칙
        : 명사적 의미를 갖게 만듦.
        : 첫글자를 소문자로 표기, 연결된 단어들은 대문자로 표기
        ex) phoneNumber, redApple
        3. 메소드 이름 규칙
        : 동사적 의미를 갖게 만듦.
        : 첫글자는 소문자로 표기, 연결된 단어들은 대문자로 표기
        : 메소드명을 짓고 나서 제일 뒤엔 한 쌍의 괄호 "()"가 붙음
        ex) calPay(), join()
        4. 상수 이름 규칙
        : 모든 문자를 대문자로 표기
        : 단어와 단어 사이는 _로 구분을 한다.
        ex) LOGIN_OK

728x90

>> 4가지의 자료형
1. 논리형 자료형 (논리값: true, false)
논리형 자료형에는 true, false가 존재함

2. 숫자형 자료형
 1) 정수형
 - 정수형에는 4가지 유형이 있다.
 - 정수형 예약어: byte, short, int, long 형이 있고, 주로 int형을 사용.
 - 정수형은 10진수뿐만 아니라 2진수,8진수, 16진수를 표현할 수 있다.
 - 정수형의 기본형은 int이고, long형을 사용할 때는 할당할 숫자 뒤에 "L"을 붙여야 한다.
 
 2) 실수형
 - 실수형에는 2가지 유형이 있다.
 - 실수형 예약어: float, double 형이 있고, 주로 double을 사용.
 - float 형을 사용하려면 할당할 숫자 뒤에 "F"를 붙여야 한다.
 
3. 문자형
 - 단일 문자에는 반드시 홑따옴표를 넣는다.

4. 문자열형
 - 참조자료형 -> 주소를 담는다

>> 출력문의 종류
 1. System.out.println();   => ln은 줄바꿈 line의 약자
 2. System.out.print();
 3. System.out.printf("출력하고자하는 데이터형식");   => f는 format의 약자, 줄바꿈x

public class A_Variable {
    // 변수의 필요성
    // 시급과 근무시간과 근무일수를 곱해서 월급을 계산하는 메소드

    public void calPay() {
        System.out.println("----------변수 사용하기 전----------");

        System.out.println("시급 : 9380원");
        System.out.println("근무 시간 : 8시간");
        System.out.println("근무 일자 : 5일");

        // 주급 = 시급 x 근무시간 x 근무일자
        // 출력형식 "홍길동 : oooooo원 형식으로 출력!"
        // 문자열은 쌍따옴표("")로 묶어서 처리한다.
        // 자바에서 +기호는 값과 값을 붙일 때 사용
        // 자바에서 *기호는 곱하기를 할 때 사용
        System.out.println("홍길동 : " + (9380 * 8 * 5) + "원");
        System.out.println("손길동 : " + (9380 * 8 * 5) + "원");
        System.out.println("이길동 : " + (9380 * 8 * 5) + "원");
        System.out.println("유길동 : " + (9380 * 8 * 5) + "원");
        System.out.println("채길동 : " + (9380 * 8 * 5) + "원");


        System.out.println("----------변수 사용 후----------");
        // 각각의 시급, 근무시간, 근무일수라는 값을 담을 공간 즉 변수를 만들고 값을 담는다.
        int pay = 9400; //시급
        int time = 8; // 근무시간
        int day = 5; // 근무 일수

        System.out.println("시급 : " + pay + "원");
        System.out.println("근무 시간 : " + time + "시간");
        System.out.println("근무 일자 : " + day + "일");

        System.out.println("주길동 : " + pay * time * day + "원" );
        System.out.println("임길동 : " + pay * time * day + "원");
        System.out.println("변길동 : " + pay * time * day + "원");
    } // calPay() 영역 끝


    // 변수의 선언
    public void declareVariable() {
        //System.out.println(pay); 변수는 {} 중괄호 안에서 선언되고 사용됨

        //1. 논리형 자료형 (논리값 : true, false)
        boolean isTrue; // 1byte
        isTrue = true;
        boolean isFalse = false;


        // 2. 숫자형 자료형
        // 1) 정수형     
        byte bNum = 1; //1byte
        short sNum = 2; // 2byte
        int iNum = 3; // 4byte -> 보통 제일 많이 사용
        long lNum = 4L; // 8byte // 대문자 L, 소문자 l 둘다 가능하지만 L 권장

        // 2) 실수형
        float fNum = 2.22f; // 4byte
        double dNum = 3.333; // 8byte -> 보통 제일 많이 사용

        // 3. 문자형
        char ch;
        ch = 'a'; // 단일 문자에는 반드시 홑따옴표를 넣는다.

        // 4. 문자열형 : 참조자료형 -> 주소를 담는다
        String str;
        str = "abc";


        // 1. 9개의 자료형을 선언함
        // 2. 9개의 값의 초기화를 진행함
        // 3. 9개의 값이 제대로 들어갔는지 확인해보기
        // 변수이름 : XX <== 형식은 이렇게 출력
        /*
        System.out.println("isTrue : " + isTrue );
        System.out.println("isFalse : " + isFalse );
        System.out.println("bNum : " + bNum );
        System.out.println("sNum : " + sNum );
        System.out.println("iNum : " + iNum );
        System.out.println("lNum : " + lNum );
        System.out.println("fNum : " + fNum );
        System.out.println("dNum : " + dNum );
        System.out.println("ch : " + ch );
        System.out.println("str : " + str );
        */


        //System.out.println("어쩌고" + 저쩌고);

        //System.out.println(isFalse);
        //System.out.print(isTrue);
        //System.out.print(isFalse);

        // 출력문의 종류
        // 1. System.out.println() ; => 줄바꿈 line의 약자
        // 2. System.out.print();
        // 3. System.out.printf("출력하고자하는 데이터 형식"); => f는 format의 약자 , 줄바꿈은 해주지 않음
        // => 구멍의 개수와 매꿀 변수의 개수와 순서, 종류가 명확해야 한다.
        System.out.printf("isTrue의 값은 %b입니다. \n", isTrue);
        System.out.printf("isFalse의 값은%b입니다.\n", isFalse);
        // %b : true, false 논리형 변수를 담을 수 있게 뚫어주는 구멍
        System.out.println();

        System.out.printf("bNum : %d\n", bNum);
        System.out.printf("sNum : %d\n", sNum);
        System.out.printf("iNum : %d\n", iNum);
        System.out.printf("lNum : %d\n\n", lNum);
        //%d : byte, short, int, long 정수형 변수를 담을 수 있게 뚫어주는 구멍

        System.out.printf("fNum : %.2f\ndNum : %f\n\n", fNum, dNum);
        // %f : 실수형 변수를 담을 수 있게 뚫어주는 구멍
        // 소수점 아래 7번째 자리에서 반올림 돼서 6번째까지만 출력이 되는 형식
        // %.Nf : 소수점 아래에서 N+1번째에서 반올림 되어 N번째까지만 출력이 되는 형식
        System.out.printf("소문자 ch : %c\n대문자 ch : %C\n", ch, ch);
        System.out.printf("소문자 str : %s\n대문자 str : %S\n\n", str, str);
        // %c : 문자형 변수를 담을 수 있게 뚫어놓은 구멍
        // %C : 해당 문자형 변수를 담을 수 있지만, 대문자로 변경해서 출력할 수 있게 햊는 포맷
        // %s : 문자열형 변수를 담을 수 있게 뚫어놓은 구멍
        // %S : 해당 문자열형 변수를 모두 대문자로 변경해서 출력할 수 있게 해주는 포맷

        //System.out.printf("계행은 \"\\n\"을 사용합니다");


    } // 매소드 영역 끝

    // 상수 : 변하지 않는 수
    public void constant() {

        int khNum;

        khNum = 1;
        System.out.println(khNum);

        khNum = 2;
        System.out.println(khNum);

        // 상수 : ex) 1760년도부터 올해의 년도까지를 계산하는 메소드
        // [표현법] final 자료형 상수이름;

        final int START_YEAR = 1760;

        double PI = 3.14;

        System.out.println(START_YEAR);

    }
 
} // A_Variable 클래스 영역 끝

 

nextInt(), nextDouble, nextFloat(), nextLong() : 다음 입력받은 특정 자료형을 반환

nextLine() : 사용자가 입력한 값 중 공백이 있을 경우, 공백에 무관하게 한 문장을 모두 출력  ex) 주소

                     '\n'이 나올때까지 한 라인을 입력받고 '\n\을 버린 나머지를 반환
next() : 사용자가 입력한 값 중 공백이 있을 경우, 공백 이전까지만 입력 받음 ex) 이름

            다음 입력받은 것을 반환       

public class B_Keyboardinput {
    public void inputTest() {

        Scanner sc = new Scanner(System.in);
        // System.in : 입력받은 값들을 받아들이겠다. (바이트 단위로)

        //사용자의 인적사항을 입력받아 출력해보자
        //이름, 나이, 성별, 키, 주소,

        // 입력받고자 하는 내용을 먼저 질문해서 입력을 유도
        System.out.print("당신의 이름은 무엇입니까? : ");

        // 사용자가 입력한 값을 문자열로 받아오는 메소드
        // nextLine(), next()
        String name;
        name = sc.nextLine();

        System.out.println(name + "님 안녕하세요!");

        System.out.print("당신의 나이는 몇 살입니까? :");
        int age = sc.nextInt();
        System.out.println("당신의 나이는" + age + "입니다.");

        System.out.print("당신의 키는 어떻게 되세요? : ");
        double height = sc.nextDouble();
        System.out.println("당신의 키는" + height + "입니다.");

        sc.nextLine(); // 앞에 남은 개행 문자 없애주기

        System.out.print("주소가 어떻게 되세요? : ");
        String address;
        address = sc.nextLine();
        //address = sc.next();

        System.out.println(address + "입니다.");
        // nextLine() : 개행문자를 없애주기 때문에 필요한 경우 한 번 더 사용이 가능하다.
        // 버퍼라는 공간에 남아있는 \n을 없애준다.
    }


    // 메소드 만들기
    // 메소드 명 : inputTest2
    // 이름, 나이, 성별(M/F), 주소
    // ---------- 회원가입 ----------
    // 변수(식별자) 생성해서 대입하고
    // 각각의 정보 입력받고
    // 밑의 형식으로 출력
    // ooo님의 이름 : ooo
    // ooo님의 나이 : oo
    // ooo 님의 성별 : M/F
    // ooo 님의 주소 : ooo oo oo
    public void inputTest2( ) {

        System.out.println("--------- 회원가입 ----------");

        Scanner sc = new Scanner(System.in);

        System.out.print("당신의 이름은 무엇입니까? ");
        String name = sc.nextLine();

        System.out.print("당신의 나이는 몇 살입니까? ");
        int age = sc.nextInt();

        sc.nextLine(); // 앞에 남은 개행 문자 없애주기
        System.out.print("성별을 입력하세요. 단, M/F로 입력 : ");
        char gender = sc.nextLine().charAt(0); // 먼저 문자열을 입력 받은 후 그 문자열의 0번째 문자를 추출
        // 만약에 해당 문자열의 길이보다 더 큰 숫자를 적게 되면
        // StringIndexOutOfBounds 오류가 발생한다.

        System.out.print("주소가 어떻게 되세요? ");
        String address = sc.nextLine();

        System.out.println();
        System.out.println();

        System.out.println(name + " 님의 개인정보");
        System.out.println(name + " 님의 이름 : " + name);
        System.out.println(name + " 님의 나이 : " + age);
        System.out.println(name + " 님의 성별 : " + gender);
        System.out.println(name + " 님의 주소 : " + address);
    }
}
public class Run {

    public static void main(String[] args) {
	// A_Variable 클래스의 calPay 메소드 사용하기
	A_Variable a = new A_Variable();  //2단계 (생성) 클래스를 대표하는 이름
        //a.calPay();
        //a.declareVariable();
        //a.constant();
        
        B_Keyboardinput b = new B_Keyboardinput();
        //b.inputTest();
        //b.inputTest2();

	//TypeCasting
	Example e = new Example();
	// e.autoCasting();
	e.forceCasting();
	}
}

 

 

728x90