Java| 데이터 출력(printf), 변수의 여러가지 형태

00. Review

메소드 블록 코드구조 이해

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
  • public : 메소드의 접근제어자, public은 누구나 이 메소드에 접근할 수 있다는 의미이다.
  • static : 메소드에 static 이 지정되어 있는 경우 이 메소드는 인스턴스 생성없이 실행 할 수 있음을 의미한다.
  • void : 메소드의 리턴값이 없음(void: 사전적으로 "텅 빈" 이라는 뜻)을 의미한다.
  • String[] : 문자열을 나타내는 자바의 자료형이다. ([]가 있으므로 한 개가 아닌 여러개의 값으로 이루어진 배열임을 의미한다.)
  • args : String[] 자료형에 대한 변수명이다.
  • System.out.println : 표준 출력으로 데이터를 보내는 자바의 내장 메소드로 문자열을 화면에 출력한다.

출처:https://wikidocs.net/278

01. System.out.printf( 서식문자 , 데이터 )

화면에 데이터를 format을 정해서 출력 해주는 메소드

  • 어떤 형식을 주는 것; 서식문자라고도 한다. 구분자가 중요하다.

  • f에서는 %를 구분하기 위한 서식문자로 사용한다

서식문자출력의 형태
%bboolean 형식으로 출력
%d정수 형식으로 출력
%08진수 정수의 형식으로 출력
%x,%X16진수 정수의 형식으로 출력
%f소수점 형식으로 출력
%c문자형식으로 출력('')
%s문자열 형식으로 출력("")
%n줄바꿈 기능
%e,%E지수 표현식의 형식으로 출력

참조 : https://keep-cool.tistory.com/15

02. 변수 VARIABLE

변수에서 가장 중요한 것

  • 변수란? 객체의 주소를 저장할 수 있는 공간
  • 변수에 데이터를 할당 하는 방법
  • 변수에 할당한 데이터를 가져오는 방법
  • 코딩은 이 두가지만 구별 하면 한단계 레벨업

변수에 데이터를 할당 하는 방법

  • 변수 선언 : 자료형 변수명 int a;
  • 변수 선언 방법은 compiler 언어와 interpreter 언어의 방식이 다르니 알아둘 것. 일반적으로 interpreter언어의 변수 선언이 더 쉽다.
  • 변수 선언 및 초기화 : 자료형 변수명 = 데이터 int a = 0; 항상 오른쪽에 값을 넣는다. 오른 쪽 것을 왼쪽에 넣어라라는 뜻.
  • 할당(대입) 연산자 : =

변수에 할당한 데이터를 가져오는 방법 중요

  • 변수에 할당하는 것이 아니면 가져오는 것임(=이 없으면 가져온 것.넣어라 가져와라만 알자. )
  • System.out.print(변수명);

기본형 변수 데이터 할당 및 출력

  • 기본형은 값이 들어가는 것, 참조형은 주소가 들어가는 것

01. 변수의 유형

01. 숫자형 변수 (Number)

숫자 자료형은 숫자 형태로 이루어진 자료형으로 우리가 이미 익숙히 알고 있는 것들이다. 123과 같은 정수, 12.34 같은 실수, 드물게 쓰이긴 하지만 8진수나 16진수 같은 것들도 있다.

- 정수형

  • int, long
  • int : default 21억 미만 저장시 사용

자바의 정수를 표현하기 위한 자료형은 int, long 이다. (byte, short등도 있지만 잘 사용하지 않는다.)

int와 long의 차이는 표현할 수 있는 숫자의 범위이다.

자료형표현범위
int-2147483648 ~ 2147483647
long-9223372036854775808 ~ 9223372036854775807

다음과 같이 사용한다.

int age = 10;
long countOfStar = 8764827384923849L;

long 변수에 값을 대입할 때는 대입하는 숫자 값이 int 자료형의 최대값인 2147483647 보다 큰 경우 8764827384923849L과 같이 L 접미사(또는 소문자 l, 소문자 'l'은 숫자 1과 비슷하게 보이므로 추천하지 않는다.)를 붙여 주어야 한다. 만약 큰 숫자에 'L'과 같은 접미사를 누락하면 컴파일 에러가 발생한다.

- 실수형

자바의 실수를 표현하기 위한 자료형은 float, double 이다.

float와 double의 차이 역시 표현할 수 있는 숫자의 범위이다.

자료형표현범위
float−3.4∗1038 ~ 3.4∗1038
double−1.7∗10308 ~ 1.7∗10308

다음과 같이 사용한다.

float pi = 3.14F;
double morePi = 3.14159265358979323846;

자바에서 실수형은 디폴트가 double이므로 위의 예에서 보듯이 float 변수에 값을 대입할 때에는 3.14F 와 같이 F접미사(또는 소문자 f)를 꼭 붙여 주어야 한다. float 자료형에 값을 대입할 때 접미사를 누락하면 컴파일 에러가 발생한다.

또는 과학적 지수 표현식으로 다음과 같이 사용할 수 있다.

double d1 = 123.4;
double d2 = 1.234e2;

d1과 d2의 값은 123.4로 같다. d2의 e2는 10의 제곱(102)을 의미한다. 즉 1.234∗102 이 되어 123.4 가 되는 것이다.

  • double, float
  • double : default

해보기| DoubleVarTest.java

// 변수 선언
double d0;
float f0;

// 변수 초기화
d0 = 3.14;
f0 = 3.14F; // 0f 소문자 가능

// 변수 선언과 초기회
double d1 = 3.14;
float f1 = 3.14F; // 1f 소문자 가능 

//  출력 
System.out.print(d0);
System.out.print(f0);
System.out.print(d1);
System.out.print(f1);

해보기| IntVarTest.java

// 변수 선언
int i0;
long l0;
// 변수 초기화
i0 = 0;
l0 = 0L; // 0l  소문자 가능
// 변수 선언과 초기화
int i1 = 1;
long l1 = 1L; // 1l  소문자 가능

//  출력 : 주의 =>  변수명과 문자열은 다름
System.out.print("i0");
System.out.print("l0");
System.out.print("i1");
System.out.print("l1");

System.out.print(i0);
System.out.print(l0);
System.out.print(i1);
System.out.print(l1);

02. 논리형

  • boolean

참 또는 거짓의 값을 갖는 자료형을 불 자료형이라고 한다. 자료형의 명칭은 boolean(불린 또는 불리언이라고 부른다)이다. 불 자료형에 대입되는 값은 참(true) 또는 거짓(false)만 가능하다.

다음은 불 변수에 값을 대입한 예제이다.

boolean isSuccess = true;
boolean isTest = false;
2 > 1             // 참
1 == 2            // 거짓
3 % 2 == 1        // 참 (3을 2로 나눈 나머지는 1이므로 참이다.)
"3".equals("2")   // 거짓 

이러한 부울 연산의 결과는 참 또는 거짓이므로 if문과 같은 조건문에 쓰이거나 불 자료형에 대입될 수 있다.

조건문

불 연산은 보통 다음처럼 조건문의 판단 기준으로 많이 사용한다.

int base = 180;
int height = 185;
boolean isTall = height > base;

if (isTall) {
    System.out.println("키가 큽니다.");
}

하나의 예를 더 보자.

int i = 3;
boolean isOdd = i % 2 == 1;
System.out.println(isOdd);  // true 출력

i % 2 == 1은 i를 2로 나누었을 때 나머지가 1인지를 묻는 조건문이다. i는 3이므로 3을 2로 나눈 나머지는 1이 되어 참이 된다. 따라서 isOdd 는 true 값을 갖게 될것이다.

해보기| BoolVarTest.java

// 변수 선언
boolean t0;
boolean f0;

// 변수 초기화
t0 = true;
f0 = false; // 0f 소문자 가능

// 변수 선언과 초기회
boolean t1 = true;
boolean f1 = false; 

//  출력 
System.out.print(t0);
System.out.print(f0);
System.out.print(t1);
System.out.print(f1);

03. 문자형 (char)

한 개의 문자 값에 대한 자료형은 char 를 이용한다.

char 자료형은 다음과 같이 사용한다.

char a1 = 'a';

주의할 점은 위와같이 문자값을 '(단일 인용부호)로 감싸주어야 한다는 점이다. char 자료형은 사실 프로그램 작성 시 그리 많이 사용되는 편이 아니다. 어쩌면 거의 사용 할 일이 없을 정도로 활용성이 적다.

char는 문자값을 표현하는 방식이 다양하기 때문에 주의해야 한다. 다음과 같은 소스코드를 작성하고 실행해 보자.

char a1 = 'a';  // 문자로 표현
char a2 = 97;  // 아스키코드로 표현
char a3 = '\u0061';  // 유니코드로 표현

System.out.println(a1);  // a 출력
System.out.println(a2);  // a 출력
System.out.println(a3);  // a 출력

세가지 모두 'a'라는 문자를 출력할 것이다. 즉 'a'라는 문자값을 위와 같이 'a', 97, '\u0061'과 같이 값을 설정해도 모두 같은 것이라는 말이다. 첫번째는 문자값, 두번째는 아스키코드값, 세번째는 유니코드값으로 표현한 것이다.

  • char
  • 한개 문자 저장>>주민번호 1,2로 남여냐 알아볼 때 사용
  • 여러개의 문자(문자열)은 String 객체 사용>> 다른 아이구나...? 스트링은 객체형 스트링은 주소를 넣는다

04. 참조형

  • 중요하니 조금 자세히 알아보자

charAt

charAt은 문자열에서 특정 위치의 문자(char)를 리턴한다.

다음과 같은 문자열을 보자.

String a = "Hello Java";

위와 같은 a 문자열에서 "J"라는 문자는 6번째 인덱스에 위치한 문자이다. 6이라는 숫자로 "J"라는 문자를 얻기 위해서는 다음과 같이 charAt을 사용한다.

String a = "Hello Java";
System.out.println(a.charAt(6));  // "J" 출력

"Hello Java" 라는 문자열에서 "J"라는 문자는 일곱번째 문자이다. 하지만 6으로 문자를 찾아야 하는 이유는 자바는 숫자를 0부터 세기 때문이다.

문자열 포맷 코드

문자열 포매팅 예제에서는 대입해 넣는 자료형으로 정수와 문자열을 사용했으나 이 외에도 다양한 것을 대입할 수 있다. 문자열 포맷 코드로는 다음과 같은 것이 있다.

코드설명
%s문자열(String)
%c문자 1개(character)
%d정수(Integer)
%f부동소수(floating-point)
%o8진수
%x16진수
%%Literal % (문자 % 자체)

여기에서 재미있는 것은 %s 포맷 코드인데, 이 코드는 어떤 형태의 값이든 변환해 넣을 수 있다. 무슨 말인지 예를 통해 확인해 보자.

System.out.println(String.format("I have %s apples",  3));  // "I have 3 apples" 출력
System.out.println(String.format("rate is %s", 3.234));  // "rate is 3.234" 출력

3을 문자열 안에 삽입하려면 %d를 사용하고, 3.234를 삽입하려면 %f를 사용해야 한다. 하지만 %s를 사용하면 이런 것을 생각하지 않아도 된다. 왜냐하면 %s는 자동으로 % 뒤에 있는 값을 문자열로 바꾸기 때문이다.

  • 객체타입의 참조 주소를 저장
  • 기본형 변수 이외에는 모두 참조 변수
  • String 클래스 : 문자열을 저장하는 객체 타입<< 참조형 데이터 타입
  • 스트링은 주소와 값의 경계. 객체지만 값이 들어간다고 생각하자. 나중에 객체를 알고나면 설명이 가능...
package chapter03;

public class StringEx {

    public static void main(String arg[]) {

        String name; // 변수 선언
        name = "홍길동"; // 변수 초기화

        String name2 = "홍길동"; // 선언과 동시에 초기화
        String name3 = null;   // null값으로 초기화 참조변수일 때만 사용. 주소가 없으니 데이터도 없고 갯수확인 불가
        String name4 = "";     // ""값으로 초기화

        System.out.println("name2="+name2);
        System.out.println("name3="+name3);
        System.out.println("name4="+name4);
    }

}

상수와 리터럴

  • 상수 : 변수에 데이터 할당 후 변경할수 없는 데이터 final
  • 리터럴 : 소스에 직접 입력된 데이터
package chapter03;

public class ConstEx {

    public static void main(String[] args) {
        final double PI = 3.14; 
        //PI = 3.14159; // 변경불가
    }
}

변수의 범위(Scope)

  • 변수 선언 후 사용 가능한 범위
  • 자바에서 지역변수는 {} 범위를 가짐: 가장 밖의 것은 안의 것을 쓸 수 있지만 안의 것은 밖의 것을 쓸 수 없음.
package chapter03;

public class ScopeEx { // 1. 클래스 블럭

    int no; // 1. 클래스 블럭 내에서 사용 가능한 변수

    public static void main(String[] args) { // 2. main 메서드 블럭

        String name; // 2. main 메서드 블럭 내에서 사용 가능한 변수

        if (true) {
            // 메서드 블럭 안에서 선언한 변수 사용 가능
            name = "홍길동";

            // if문 블럭안에서 변수 선언
            String email = "[email protected]";
        }

        // if문 블럭 밖에서 email 변수를 사용하면 에러 발생 >> 블럭 밖에서 넣거나 가져오거나 하는 행위가 불가능.>>같은 블럭에 넣으면 가능.
        //email = "[email protected]";
    }
}

두 변수의 값 교환하기: 모든 핵심, 변수를 써야하는 이유

  • cupA = 'red', cupB = 'blue' 두 컵의 데이터를 교환하시오.

  public class ChangeVar {

  	public static void main(String[] args) {
  	
  		String cupA = "yellow";
  		String cupB = "black";
  		String cupT = "";
  		
  		cupT = cupA; 
  		cupA = cupB; 
  		cupB = cupT; 
  	
  		System.out.printf("(%s, %s)", cupA, cupB);
  		
  	}

  }

형변환 type casting: 기본값보다는 객체에서 중요

  • 논리형을 제외하고 형변환 가능
    • int를 long형으로 바꾼다 그 역으로도 바꾼다. 하지만 큰 거에서 작은 거로 바꿀때는
  • 자동(묵시적)형변환: 작은 거i에서 큰 거l로 변환과
  • 강제(명시적)형변환: 큰 거l에서 작은 거i

자동(묵시적) 형변환

  • 큰크기자료형에 작은크기자료형을 할당하는 경우
  • byte < short < int < long < float < double(가장 큼)
package chap03;

public class CatingEx {

	public static void main(String[] args) {
		// 자동변환 예시
		int number = 10; //
		long number2 = number; //
		float number3 = number2; // 
		double number4 = number3; //
		
		System.out.println(number);// 10
		System.out.println(number2);// 10
		System.out.println(number3);// 10.0
		System.out.println(number4);// 10.0

	}

}

강제(명시적) 형변환

  • 작크기자료형에 큰크기자료형을 할당하는 경우
  • 작크기자료형 = (작크기자료형) 큰크기자료형
package chapter03;

public class CastingEx2 {

    public static void main(String[] args) {

        // 강제형변환 예시
        double pi = 3.14;   // double 자료형

        int pi2 = (int)pi;  // 강제형변환

        System.out.println(pi2); // 값의 손실 발생
    }
}

문자열을 정수로 변환: 어렵다...

  • Integer 클래스 parseInt 메서드 사용
  • 우리가 숫자를 넣어도 키보드를 통해 인터넷에 있는 건 모두 문자열이다. 이를 숫자로 바꾸려면 쌍따옴표를 띠어내야하니 객체로 만들어진 integer:java.lang을 이용한다. Integer.parseInt(s1)는 값이 된다.
package chapter03;

public class CastingEx4 {

    public static void main(String[] args) {

        String s1 = "1";//여기서 1은 문자열이다
        String s2 = "2";

        int i1 = Integer.parseInt(s1);
        int i2 = Integer.parseInt(s2);

        int add = i1 + i2;// 덧셈이 가능해진다

        System.out.println(add);// 합계


    }
}

좋은 웹페이지 즐겨찾기