javaboiii의 JAVA/JAVA 요약정리(멘토씨리즈)

JAVA - 2)변수와 자료형

javaboiii 2024. 7. 13. 23:49

JAVA

1. 데이터(Data)

컴퓨터 프로그램은 데이터(data)와 명령어(instruction)의 결합으로 구성됩니다.

데이터란 실제적이 값(value)를 의미하는데 숫자, 문자와 같은 단순 데이터부터 사진, 영상 등의

복합 데이터가 있습니다. 데이터는 정확하고 언제든지 수정할 수 있어야 하며, 사용 목적에 따라 다른

형태로 가공할 수 있어야 합니다. 이러한 데이터는 컴퓨터의 메모리에 저장됩니다.

 

출력문

  • System.out.print() : 괄호 안의 내용을 콘솔 화면에 출력합니다 (문자열로 인식)
  • System.out.println() : 괄호 안의 내용을 출력하고 행을 바꿉니다 (문자열로 인식)
  • System.out.printf() : 문자열을 서식 문자를 이용해 형식화된 내용으로 출력합니다

여기서 System.out은 시스템의 표준 출력 장치를 말합니다

 

public static main(String[] args){
	// 괄호() 안에 데이터를 출력합니다
    System.out.print("Hello ");
    System.out.print("World");
}

실행 결과 : 
			Hello World

public static main(String[] args){
	// 괄호() 안에 데이터를 출력합니다
    System.out.println("Hello ");
    System.out.println("World");
}

실행 결과  :
				Hello
				World
                
public static main(String[] args){
    // 괄호() 안에 데이터를 출력합니다
    System.out.println("Hello"+1);
    System.out.println(1+1);
}
실행 결과 :
	Hello1
            2

 

System.out.print(), System.out.println() 출력문은 모든 데이터를 문자열로 인식하여 있는 그대로 출력하는 메서드입니다.

반면, System.out.printf() 출력문은 값의 자료형에 따라 서식 문자를 이용해 출력하는 데이터의 형식을 지정합니다.

하나의 출력문에 여러개의 서식 문자를 사용할 수 있으며 반점(,)으로 구분된 데이터가

순차적으로 대입되어 출력됩니다.

컴퓨터(및 이와 유사한 기기)는 인간처럼 생각하고 판단하는 능력이 없기 때문에 개발자가 직접

서식문자를 사용해 형식을 지정해야 합니다.

 

자바에서 + 기호는 문자열을 연결하는 문자열 결합 연산자의 역할과

산술 연산자, 부호 연산자로 사용됩니다.

 

서식문자

서식문자 출력 형태
%d 정수(10진수)
%o 정수(8진수)
%x 정수(16진수)
%f 실수
%e 지수(e표기 기반)
%g 출력 대상에 따라 %e 또는 %f 형태로 출력
%s 문자열
%c 문자

 

public static void main(String[] args){
	System.out.printf("저는 대학교 %d학년 입니다",3);
}
출력 결과 : 저는 대학교 3학년 입니다

public static main(String[] args){
	System.out.printf("%d은 첫번째, %f은 두번째, %s은 세번째", 1, 2.0, 셋);
}
출력 결과 : 1은 첫번째, 2.000000은 두번째, 셋은 세번째

%nd // n칸만큼 확보한 후 , 오른쪽 정렬하여 출력합니다
	%5d,1	=>	ㅁㅁㅁㅁ1

 

%-nd는 n칸 만큼 확보한 후 왼쪽으로 정렬하여 출력하라는 뜻입니다.

자신의 수가 정렬하려는 공간의 크기(n)보다 크면 정렬이 무시됩니다

 

%.nf : 소수점 아래 n번째 자리까지 출력(반올림)

%.1f,1.123123 ==> 1.1

 

2. 변수

변수

컴퓨터는 프로그램을 실행하는 데 필요한 것들을 미리 올려놓고 사용하는 저장 공간이 있습니다.

우리는 그 공간을 메모리라고 부릅니다.

개발자는 프로그램을 만들고 실행하는 데 필요한 메모리에 저장해두고, 필요할 때마다 꺼내서

사용합니다. 저장하고자 하는 값들을 무질서하게 저장하는 것이 아니라, 메모리의 규칙 속에서

일부 공간을 할당받아야 합니다.

이렇게 메모리에 값을 저장하기 위해 할당해 놓은 특정 공간을 변수라고 합니다.

변수는 말 그대로 그안에 담긴 수가 변한다고 하여 변수라고 부릅니다.

 

==> 메모리에 값을 저장해 두기 위해 할당받아 사용하는 특정 공간

 

변수 선언하기

변수를 사용하기 위해서는 먼저 변수를 선언해야 합니다. 변수를 선언하려면 메모리에 두가지 정보가 필요한데,

첫 번째는 변수에 담을 데이터의 형태이고 두 번째는 변수의 이름입니다.

변수의 담을 형태(자료형) --> int number; <-- 변수의 이름

 

자바에서는 데이터의 형태를 '자료형'이나 '형', 또는 '타입(Type)'이라고 부릅니다.

 

변수 이름 정하기

제약 조건 예시
영어 대소문자 구분 Name과 name은 다른 변수
첫글자는 숫자로 시작할 수 없음
일반적으로 영어 소문자로 시작
top10은 사용 가능, 10top은 불가
특수문자는 '$', '_'만 사용가능 $dallar는 가능, #Sarp은 불가
자바 예약어(키워드)는 사용 불가 True는  가능, true는 불가

 

==> 변수를 사용하기 전에 먼저 변수를 선언하고 초기화해야 하는데, 변수를 선언하기 위해서는 변수에 담을 데이터의

형태(자료형)와 변수 이름이 필요

 

변수에 데이터 입력하기

데이터를 변수에 저장하는 방법은 대입 연산자('=')를 사용합니다.

프로그래밍에서 대입연산자는 '오른쪽 값을 왼쪽에 대입한다'를 의미합니다.

자료형 변수;

변수 = 데이터;

or

자료형 변수 = 데이터;

변수를 선언하고 처음으로 값을 대입하는 것을 '초기화'라고 합니다.

이 처럼 변수의 선언과 초기화를 한줄로 코딩할 수 있습니다.

 

 

3.자료형(Data Type)

자료형에는 자바에서 기본으로 제공하는 기본 자료형(primitive type)과 기본형을 제외한

모든 자료형인 참조 자료형(refernce type)이 있습니다.

 

기본 자료형(primitive type) : 실제 데이터 값을 저장합니다. 정수, 실수, 논리 타입으로 분류된 8개의

자료형이 있습니다. 각각 저장 크기가 다르며 기본값이 정해져 있습니다.

분류 종류
정수형 byte형, short형, int형, long형
실수형 float형, double형
문자형 char형
논리형 boolean형

 

참조 자료형(refernce type) : 데이터가 저장되어 있는 메모리 번지를 저장합니다. 기본 자료형을 제외한

나머지 사용자 정의 자료형을 말하며, 기본값이 저장해져 있지 않기 때문에 null 값이 존재합니다.

 

참조 자료형의 종류는 배열형, 열거형, 클래스, 인터페이스가 있습니다.

 

==> 기본 자료형은 이미 존재하고 있는 데이터 타입

       참조 자료형은 정형화된 형식과 크기 등이 미리 결정되어 있지 않으며, 개발자가 임의로 만들 수 있습니다.

 

오버플로우(overflow) / 언더플로우(underflow)

오버플로우는 해당 자료형이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상 --> 잘못된 결과를 얻을 수 있음

언더플로우는 해당 자료형이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상

 

정수형

자료형 메모리 사용 크기 데이터의 표현 범위
byte 1byte -128 ~ 127
short 2byte -32,768 ~ 32,767
int 4byte -2,147,483,648 ~ 2,147,483,647
long 8byte -9,223,372,036,854,775,808 ~
-9,223,372,036,854,775,807

byte, short, int 자료형의 변수 선언과 데이터저장은 일반 변수 선언/저장이 같고

long 자료형의 변수 선언은 일반 변수 선언과 같지만 데이터를 저장할 때 

int형의 허용 범위를 초과하는 경우, 저장하는 값의 마지막에 식별자인 대문자 ' L ' 이나

소문자 ' l '을 붙여 long형임을 컴파일러에게 알려줘야 합니다.

그렇지 않으면 컴파일러가 int형으로 인식 후 에러를 표시합니다.

 

실수형

자료형 메모리 사용 크기 데이터의 표현 범위 정밀도
float 4byte (3.4*10^-38) ~ (3.410^38) 7자리
double 8byte (1.7*10^-308) ~ (1.7*10^308) 15자리

 

float형은  부동 소수점 형식으로 소수점 7자리까지 표현하고, 무한대의 값을 저장할 수 있습니다.

정수형에서 long형의 경우처럼 식별자인 대문자 ' F '나 소문자 ' f '를 숫자 뒤에 붙여서 float형임을 알려줘야 합니다.

 

자바에 double형을 기본으로 사용합니다. 데이터를 저장할때 ' 0.0d '형식이 원칙이지만 일반적으로 ' d '는 생략합니다.

자바에서는 실수의 연산 작업을 수행할 때 double형 보다 작은 크기의 float형 변수들은

모두 double 타입으로 변환되어 실행됩니다.

 

반드시 float형이 필요한 경우가 아니라면 실수를 저장하는 변수로 double형을 사용하는 것을 권장합니다.

 

문자형 char

컴퓨터는 2진수밖에 인식하지 못하므로 문자를 사용하기 위해서는 컴퓨터 내부에서 문자에 맞는 특정

정수값으로 저장해야합니다. 문자형은 이 문자들을 저장할 수 있는 자료형을 말합니다.

저장하려는 데이터를 작은따옴표 ' ' 로 감싸고, char변수에 대입합니다.

 

문자형은 문자 그대로를 저장하는 것이 아니라, 유니코드라는 숫자로 값을 변환하여 저장합니다.

유니코드란, 세계 각 나라의 문자들을 숫자(0 ~ 65535)로 매핑해 둔 국제 표준 규약을 말합니다.

 

그래서 char형을 문자형이기 전에, 정수형이라고 표현하기도 합니다.

public static void main(String[] args){
    int ga = '가';

    int alphabetA = 'A';

    char alphabetB = 66;

    System.out.println(ga); // '가'는 44032 유니코드 값 출력
    System.out.println(alphabetA); // 'A'와 매핑된 유니코드(정수) 65가 저장됨
    System.out.println(alphabetB); // 유니코드(정수) 66과 매핑된 'B'가 저장됨
}
실행결과 : 
44032
65
B

 

  • 아스키코드(ASCII) : 아스키코드는 0~127까지 총 128개의 문자를 처리하기 위해 만들어진 1byte의 문자 체계입니다.
  • 유니코드(Unicode) : 유니코드는 전 세계 모든 문자를 2byte로 처리하는 문자 체계입니다.

논리형 boolean

true와 false 데이터를 저장하는 boolean형은 0과 1로 표현할 수 있습니다.

 

자바 언어는 대소문자를 구별하기 때문에 true와 True는 다르게 취급하므로 boolean 자료형에 True를 대입하면 오류가 발생합니다.

 

4. 참조 자료형

프로그램을 실행할 때 필요한 메모리는 Stack이라는 공간과 Heap이라는 공간으로 나뉘어 있습니다.

기본 자료형은 Stack이라는 공간에 자리를 할당받고 데이터를 저장합니다. 그러나 참조 자료형은 Heap이라는

공간에 데이터를 저장하고, 그 주소를 Stack에 저장합니다. 주소를 참조하는 값을 저장한다고 하여

참조 자료형이라 부릅니다. 참조 자료형의 대표적인 형태로 배열, 클래스, 인터페이스가 있습니다.

 

참조 자료형  - String

자바에서 문자열을 저장할 수 있는 자료형은 String입니다. 문자열을 변수에 담으려면

큰따옴표 " "안에 데이터를 감싸고 String 변수에 대입합니다.

 

String 변수 = 데이터;

5. 형 변환

형 변환

형 변환이란 말 그대로 자료형을 다른 자료형으로 변환하는 것을 말합니다.

모든 연산은 기본적을 같은 자료형끼리만 수행할 수 있기 때문에 서로 다른 자요형의 연산을 수행하기 위해

같은 자료형으로 변환해야 합니다.

 

형 변환은 기본 자료형에서 boolean만 제외하고 서로 형 변환이 가능합니다.

 

정수형 간의 형변환

메모리에 할당받은 크기가 큰 자료형을 크기가 작은 자료형으로 변환하면 데이터의 손실이 발생합니다

반대로 크기가 작은 자료형에서 큰 자료형으로 변환할 때에는 손실이 없어 형 변환을 생략할 수 있습니다.

 

실수형 간의 형 변환

크기가 큰 자료형(double)에서 작은 자료형(float)으로 변환할 때, float의 저장 범위를 넘어서는 값을

대입하면 무한대가 되거나 0이 됩니다.

 

실수형과 정수형 간의 형 변환

 

From To 규칙
실수형 정수형 소수점 이하 값들은 버려짐
정수형 실수형 정수 뒤로 0이 붙음
단, int(정밀도 10자리)를 float(정밀도 7자리)로 변환했을 때 오차가 발생할 수 있음

 

자동 형 변환(Promotion)

  • 크기가 작은 자료형에서 큰자료형으로 변환할 때
  • 정수형이 실수형으로 변환될 때

두 자동 형 변환의 기본 원칙에서는 자바의 컴파일러가 자동으로 형 변환을 해주기 때문에 생략할 수 있습니다.

만약 크기가 큰 자료형에서 작은 자료형으로 형 변환이 필요할 경우에는 개발자가 직접 형 변환을 해야합니다.

 

실수형은 소수점까지 표현하기 때문에 정수형보다 표현 범위는 크다고 할 수 있지만,

값의 크기는 정수형이 더 클 수 있으므로 형 변환하는 경우ㅜ 오차가 발생할 수 있다는 점을 주의해야 합니다.

 

강제 형 변환(Casting)

강제 형 변환은 크기가 큰 자료형에서 작은 자료형으로 옮길 때 데이터 손실이 발생할 수도 있고 아닐 수도 있습니다

데이터 손실이 일어난다면 정확한 연산을 수행할 수 없기 때문에 예상하지 못할 결과를 얻을 수 있으므로

강제 형 변환은 항상 주의해야할 필요가 있습니다.

  • 범위 내 값에서 강제 형 변환을 실행하면 데이터의 손실 없이 변환됩니다.
  • float형이 가질 수 있는 최소값보다 작은 경우 0.0이 됩니다.
  • float형이 가질 수 있는 최대값보다 큰 경우 무한대(Infinity)가 됩니다.
  • float형의 범위 내 값이지만 소수점 아래 값에서는 정밀도에서 차이가 납니다.

자동 형 변환는 업 캐스팅( 묵시적 형 변환)이라고도 하며,

강제 형 변환은 다운캐스팅(명시적 형 변환)이라고도 합니다.

5. 데이터 입력

키보드를 통해 입력하는 데이터를 문자열로 얻기 위해서는 'java.util' 패키지에 있는 Scanner 클래스를 이용합니다.

 

import java.util.Scanner;			// Scanner 클래스 호출

Scanner 객체명 = new Scanner(System.in);	// Scanner 객체 선언

int 객체명 = Scanner.nextInt();			// int 입력받기

 

import java.util.Scanner; 구문은 자바에서 제공하는 구성 요소를 사용한다는 의미입니다

System.in은 키보드로 입력받는다는 의미이며, 객체명은 임의로 설정 할 수 있습니다.

Scanner.nextLine();는 Enter키 이전까지 입력된 문자열을 익습니다.

 

응용문제

1. 다음 빈칸에 알맞은 단어를 작성해 보세요.

  • 메모리에 값을 저장하기 위해 할당받아 사용하는 특정 공간을 OO(이)라고 합니다.
    • 정답 : 변수
  • 변수를 선언하기 위해서는 OOO, OOO 2가지 정보를 작성해야 합니다.
    • 정답 : 자료형, 변수명

2. 다음 중 변수를 이름으로 사용할 수있는 것은 무엇입니까 ?

1 1a

② +person+

name!

④ studentName

정답 : ④

 

3.  다음 코드에서 컴파일 에러가 발생하는 곳을 찾아보고,  그 이유를 적어보세요.

package section02;

public class PRACTICE_02_03{
	public static void main(String[] args){
		String fruit = "Apple";    
    }
    System.out.println("I like" + fruit);
}

정답 : 
7번 라인
fruit란 변수를 main()메서드 밖에서 사용할 수 없기 때문에

 

 

4. 다음 코드를 실행했을 때 콘솔창에 출력되는 결과는 무엇입니까 ?

 

package section02;

public class PRACTICE_02_04{
	public static void main(String[] args){
    	int numI = 'A';
        System.out.println(numI);
        
        char numC = 66;
        System.out.println(numC);
    }
}
실행결과 : 
65
C

 

 

5. 다음 코드에서 컴파일 오류가 발생하지 않으려면 코드를 어떻게 수정해야 할까요 ?

float pie = 3.1415;

 

정답

float pie = 3.1415f;
또는
float pie = (float) 3.1415;

// float형은 long형의 경우처럼 식별자인 대문자
'F'나 소문자 'f'를 숫자 뒤에 붙여 float형임을 알려줘야함

 

6. 다음과 같은 결과가 나오도록 빈칸에 알맞은 코드를 작성해 보세요.

package section02;

public class PRACTICE_02_06{
	public static void main(String[] args){
    	int n1 = 7;
        System.out.println(n1);
        
        double n2 = OOOOO n1;
        System.out.println(n2);
    }
}

정답 : (double)

 

'javaboiii의 JAVA > JAVA 요약정리(멘토씨리즈)' 카테고리의 다른 글

JAVA -6)배열  (0) 2024.07.17
JAVA - 5)제어문2  (1) 2024.07.16
JAVA -4) 제어문1  (1) 2024.07.15
JAVA - 3)연산자  (1) 2024.07.14
JAVA - 1)프로그래밍의 기본  (0) 2024.07.12