Java에서는 print(), println() 메소드를 사용해서 문자를 출력한다.
이 출력 메소드를 실행시키기 위해서는 main() 메소드안에 기술해야한다.
1. 프로그램 만들기 - 출력하기
main() 메소드는 엔트리포인트(프로그램 시작지점)으로 커맨드라인에서 프로그램을 실행시키면 가장 먼저 처리된다.
main() 이 없으면 컴파일과 프로그램 실행을 할 수 없다.
java 프로그램의 기본형은 아래와 같다.
main 메서드는 프로그램의 시작점이므로, 객체 생성 없이도 바로 호출할 수 있어야 하므로 static 키워드를 사용한다.
이름 | 설명 |
class | 새로운 클래스를 정의할 때 사용하는 키워드 |
class명 | 클래스의 이름을 의미하며, 자바에서는 클래스 이름이 파일 이름과 동일해야한다. |
public | 접근 제어자중 하나로, 해당 클래스나 메서드가 모든 클래스에서 접근 가능 |
static | 메서드나 변수를 특정 객체가 아닌 클래스 차원에서 사용 가능하게한다. |
main() | 자바 애플리케이션의 진입점 메서드로, 프로그램 실행시 제일 먼저 호출된다. |
String[] | 문자열을 요소로 가지는 배열을 의미한다. main 메서드의 매개변수로 사용되고, 프로그램 실행시 전달된 명령행 인자를 받는 역할을 한다. |
args | 타입의 변수로, 명령행 인자를 담고 있다. |
print() | 출력을 담당하는 메서드로, System.out 객체의 메서드 중 하나이다. |
\ + 한글자 | 특수문자를 표시하거나 조작을 수행한다. 예: \n → 줄바꿈 |
2. 변수
변수는 데이터를 저장할 수 있는 메모리 공간을 말한다.
java에서 변수를 사용할때는 변수의 타입과 이름을 함께 선언한다.
// 정수(integer) a를 선언
int a;
// int형 변수 a에 10을 대입(저장)
a = 10;
변수를 사용하기 위해서는 반드시 변수를 선언해야한다.
public class Main {
public static void main (String[] args) {
int a; // 변수 선언
int b;
a = 5; // 변수에 값을 대입
b = 10;
a = b; // 변수 a에 변수 b의 값을 대입
System.out.print(a); // 출력값 : 10
}
}
변수의 선언과 대입을 동시에 할 수도 있는데 이를 변수의 초기화라고한다.
int a = 10;
3. Java의 자료형 (Data Type)
자료형은 변수가 저장할 수 있는 데이터의 유형을 말한다.
java는 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉜다.
기본형 (Primitive Types) - 8개 | 참조형 (Reference Types) |
정수형 (Integral Types) - byte, short, int, long | 클래스 (Class) |
실수형 (Floating-point Types) - float, double | 인터페이스 (Interface) |
문자형 (Character Type) - char | 배열 (Array) |
논리형 (Boolean Type) - boolean | 열겨형 (Enum) |
📌 Java에서 String은 클래스이며, 참조 타입이다.
1. 정수형 (Integer Types)
타입 | 크기 | 기본값 | 최소값 | 최대값 | 예시 |
byte | 1byte | 0 | -128 | 127 | byte b = 10; |
short | 2 bytes | 0 | -32,768 | 32,767 | short s = 3000; |
int | 4 bytes | 0 | -2,147,483,648 | 2,147,483,647 | int i = 100000; |
long | 8 bytes | 0L | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 | long l = 100000L; |
int는 기본 정수형으로 많이 사용되며, 큰 숫자의 경우 long을 사용한다.
byte와 short는 메모리 절약이 필요할 때 사용되지만, 일반적으로 int보다 덜 사용된다.
long형 변수에 정수를 대입하는 경우 숫자 뒤에 l 또는 L을 붙여서 대입한다.
long num = 400000000l;
2. 실수형 (Floating-point Types)
타입 | 크기 | 기본값 | 유효 자릿수 | 예시 |
float | 4 bytes | 0.0f | 약 6-7 자릿수 | float f = 19.9f; |
double | 8 bytes | 0.0d | 약 15자릿 수 | double d = 19.99d; |
float은 정밀도가 낮고 메모리가 적게 사용된다.
double은 기본 실수형 타입으로, 더 높은 정밀도를 가져서 float 보다 더 많이 사용한다.
float 형 변수에는 f(F)를 double형 변수에는 d(D)를 접미사로 사용하여 값을 대입한다.
하지만 double타입의 경우 Java가 소수점을 포함한 리터럴을 double 타입으로 인식하여 생략해도 된다.
float a = 0.123f;
double b= 0.123d; 또는 double b = 0.123;
접미사를 쓰지않고 숫자만 사용하면 컴파일에러가 발생한다.
3. 문자형 ( char)
Java에서 문자는 유니코드(Unicode) 문자 한개를 말한다.
문자는 작은따옴표(')로 감싸고 char형 변수에 저장한다.
📌 큰따옴표(")로 감쌀 경우 문자는 문자열로 판단된다.
// 문자 그대로 지정
System.out.println('A');
// 문자코드로 지정
System.out.println('\u0041');
문자열은 + 연산자를 사용해서 연결 할 수 있다.
public class Fruit {
public class Fruit {
public static void main (String[] args){
String apple = "사과";
int a = 5;
String fruit = apple + "가 " + a + "개 있다.";
System.out.println(fruit); // 사과가 5개 있다
}
}
3. 배열 (Array)
배열은 동일한 데이터 타입의 값들을 순서대로 저장하는 자료 구조이다.
배열은 선언할 때 크기가 고정되며, 생성 후 크기를 변경할 수 없다.
배열의 선언은 new 연산자를 사용한다.
// 형 [] 배열명 = 형 [배열의 크기];
int [] a = new int [4];
int a [] = new int [4];
중괄호({})를 사용해서 선언과 초기화를 동시에 할 수 있다.
int [] a = {1,2,3,4};
배열의 특정 요소에 접근할때는 index를 사용하여 접근한다.
배열의 index는 0부터 시작하고, 마지막 index는 length -1 이다.
int a [] = new int [4];
int n = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
// a 라는 배열의 3번째 index 값을 출력
System.out.println(a[n]); // 출력 결과: 4
배열의 요소의 수를 구하기 위해서는 length를 사용한다.
int [] a = new int[4];
int b = a.length;
System.out.print(b); // 출력결과 : 4
3. 다차원 배열 (multi-dimensional array)
일반적인 배열은 요소의 수에따라 횡으로 늘어가는 일차원 배열이지만, 2차원, 3차원으로 확장하는 배열도 있다.
배열은 필요에따라 더 많은 차원으로 늘릴수 있으나, 그만큼 메모리를 소모하기때문에 주의해야한다.
다차원 배열의 대입, 초기화, 참조
// 다차원 배열 초기화
int a [][] = {{1,2,3}, {4,5,6}};
// 대입
a [1][2] = 10;
// 출력
System.out.println(a[1][2]); // 10
System.out.println(a); // [[I@1dbd16a6 → [[ : 2차원 배열 의미, I : int타입, @뒤 : 메모리주소(16진수)
// 다차원 배열 출력
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
// 출력 결과
1 2 3
4 5 10
다차원 배열의 요소수는각 차원에 대해 length 속성을 사용하여 구할 수 있다.
2차원 배열
// 2차원 배열
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 2차원 배열의 전체 요소 수 구하기
int count = 0;
for (int i = 0; i < arr.length; i++) {
count += arr[i].length; // 각 하위 배열의 길이를 더함
}
System.out.println(count); // 출력: 9
3차원 배열
// 3차원 배열
int[][][] arr3d = {
{
{1, 2},
{3, 4}
},
{
{5, 6},
{7, 8}
}
};
// 3차원 배열의 전체 요소 수 구하기
int count = 0;
for (int i = 0; i < arr3d.length; i++) {
for (int j = 0; j < arr3d[i].length; j++) {
count += arr3d[i][j].length; // 각 2차원 배열의 요소 수를 더함
}
}
System.out.println(count); // 출력: 8
4. Java의 형(DataType) 변환
1. 계산시 형 변환
Java에서 계산을 할때 변수의 형이 매우 중요하다.
만약 정수끼리 계산을 하면 그 결과는 정수를 반환하고, 실수를 반환하기 위해서는 실수표기로 계산을 해야한다.
// java - 정수 계산 : 소수점 이하는 버려진다
3 / 2 = 1
// java - 실수 계산 : double 타입으로 연산되어 소수점 이하까지 계산한다
3.0 / 2.0 = 1.5
// javascript - 정수 계산 - number 타입을 사용하기때문에 정수,실수의 구분이 없다
3 / 2 = 1.5
2. 다른 유효범위를 가진 자료형끼리 대입
1. 자동 형 변환 ( 작은 타입 → 큰 타입)
다른 형을 가지는 변수들을 대입할때, 값의 범위가 좁은 변수를 넓은 변수로 대입하면 자동으로 형이 변환된다.
반면 넓은 범위를 가지는 변수를 좁은 변수에 대입하면 컴파일 에러가 발생한다.
// 자동 타입 변환
int i = 5;
float f = i;
// 장동 타입 변환 X → long은 정수타입이라 소수점을 표현할 수 없어서 자동형변환 안됨
double d = 0.05;
long l = d;
2. 명시적 형 변환 ( 큰 타입 → 작은 타입)
(int)처럼 자료형을 ()로 감싸 변수 앞에 쓰면, 특정한 형으로 변환 할 수 있다.
이를 형변환(캐스트) 라고 하며, ()를 캐스트 연산자라고 한다.
double d = 3.14; // 부동소수점 값
int i = (int) d; // 명시적 형 변환 (소수점 이하 버려짐)
System.out.println("double to int: " + i); // 출력: 3
long l = 100000L; // 큰 정수 값
short s = (short) l; // 명시적 형 변환 (범위 초과 시 데이터 손실 발생 가능)
System.out.println("long to short: " + s); // 출력: 100000이 short 범위를 초과하면 값이 손상될 수 있음
형 | 크기 | 설명 | 유효 범위 |
double | 64bit / 8 byte | 부동소수점 타입, 소수점 포함 값 저장 | 넓다 |
float | 32 bit / 4 byte | 단정도 부동소수점 타입 | |
long | 64bit / 8 byte | 정수형, 큰 정수 값 저장 가능 | |
int | 32 bit / 4 byte | 정수형 | |
short | 16 bit /2 byte | 작은 정수형 | |
byte | 8 bit / 1 byte | 가장 작은 정수형, 1바이트 저장 가능 | 좁다 |
char | 16bit / 2 byte | 문자 타입, 유니코드 문자 저장 가능 | |
boolean | JVM에 따라 다르다 | 참/거짓 논리값 저장 |
🛠️ 용어 정리
메소드(Method)
객체의 기능을 표현하는 방법이다.
C언어의 함수와 역할,정의방법이 유사하나 C에서처럼 독립적으로 호출 될 수 없고, 객체와 사용되어야한다.
클래스(Class)
객체의 구조, 종류, 동작 등을 나타내고 객체를 생성하는 틀이다.
객체의 모든 특성을 가지고있으며, 자바 프로그램은 클래스의 집합이다.
배열(Array)
컴퓨터 자료구조의 하나로, 같은 형의 데이터들로 이루어진 집합이다.
보통 기억 장치 내에서 순서대로 저장된 리스트를 의미한다.
JavaScript와 달리 Java는 형변환을 해야한다는게 참 헷갈린다