자바 프로그램 실행, 변수와 연산자
# 자바란?
Java는 Sun Microsystems(현재는 Oracle Corporation의 일부)에서 개발한 객체 지향 프로그래밍 언어입니다. James Gosling이 이를 개발했으며, 처음에는 Oak라는 이름으로 시작되었습니다.
Java는 강력한 이식성을 제공하는 특징을 가지고 있으며, 이는 한 번 작성된 Java 코드가 여러 플랫폼에서 실행될 수 있음을 의미합니다. 이는 Java가 자바 가상 머신(Java Virtual Machine, JVM) 위에서 동작하므로 가능합니다. 이 가상 머신은 각 플랫폼에 맞게 구현되어 있어 Java 프로그램이 다양한 운영 체제에서 실행될 수 있습니다.
Java는 다양한 분야에서 사용되고 있습니다. 주로 웹 애플리케이션, 모바일 애플리케이션 개발, 엔터프라이즈 소프트웨어 개발, 게임 개발, 빅데이터 처리 및 클라우드 컴퓨팅 등의 분야에서 널리 사용됩니다.
Java는 강력한 객체 지향 프로그래밍 기능을 제공하며, 안정성, 보안성, 확장성 등의 특징으로 유명합니다. 또한 다양한 개발 도구와 라이브러리가 풍부하며, 개발자 커뮤니티가 활발하게 활동하고 있습니다. Java의 인기와 사용범위는 여전히 높으며, 많은 기업과 조직에서 기업급 소프트웨어를 개발하는 데 사용됩니다.
자바의 주요 특징과 장점은 다음과 같습니다:
- 객체 지향: 자바는 객체 지향 프로그래밍 언어로 설계되었습니다. 이는 코드를 모듈화 하고 재사용성을 높이며 유지보수를 용이하게 만듭니다.
- 플랫폼 독립적: 자바는 가상 머신(Java Virtual Machine, JVM) 위에서 실행됩니다. 이는 자바 프로그램이 한 번 작성되면 어떤 플랫폼에서든 실행될 수 있음을 의미합니다.
- 멀티스레딩 지원: 자바는 멀티스레드 프로그래밍을 지원하며, 동시에 여러 작업을 처리할 수 있습니다.
- 동적 로딩: 자바는 동적 클래스 로딩을 지원하여 실행 중에 필요한 클래스를 동적으로 로드할 수 있습니다.
- 강력한 라이브러리: 자바는 풍부한 표준 라이브러리를 제공하여 다양한 작업을 수행할 수 있습니다. 또한 오픈 소스 커뮤니티에서 다양한 라이브러리와 프레임워크를 제공합니다.
- 보안: 자바는 안전성을 중요시하며, 자바 가상 머신을 통해 악의적인 코드로부터 시스템을 보호합니다.
자바는 웹 애플리케이션 개발, 모바일 애플리케이션 개발(Android 앱 개발에도 사용), 빅데이터 처리, 엔터프라이즈 소프트웨어 개발 등 다양한 분야에서 사용됩니다.
# 자바 프로그램 실행
src > 우클릭 > New > Java Class
클래스명 Ex01 > class
클래스 첫 글자 대문자로 시작 - 클래스명 작성 - 엔터
클래스명 : 첫 글자 대문자 나머지 소문자 두 단어일 경우 낙타 표기법 ( 아래내용 참고 )
Ex01.java
실행
window : [ Ctrl ] + [ Shift ] + [ F10 ]
mac : [ Ctrl ] + [ R ]
out 폴더 내 디렉터리에서 Ex01 클래스 찾아서 확인
public class Ex01 { // Ex01 클래스의 범위 시작
public static void main( String[] args) { // main() 메서드의 범위 시작
System.out.println("Hello java");
} // main() 메서드의 범위 끝
} // Ex01 클래스의 범위 끝
대소문자를 구분함
블록이 중첩될 때마다 들여 쓰기로 설정
Tab을 누르면:4칸 들여 쓰기
들여 쓰기를 하지 않아도 프로그램은 작동하지만 가독성이 떨어짐
print : 괄호 안 내용을 단순히 출력. 개행문자(=줄 바꿈 문자=\n) 포함 안됨.
println : 괄호 안 내용을 출력한 후 마지막에 개행문자가 포함되어 있어 출력 후 한 줄 띄워짐.
public class Ex01
Ex01를 클래스라고 함
파일명과 클래스명이 같아야 함
{ } 블록을 사용해서 클래스의 시작과 끝을 나타냄
클래스명
파스칼 표기법을 사용
명사로 시작
예) HelloWorld, TestWorld, DogCat
public static void main( String [] args)
main 메서드
자바는 main( String [] args) 메서드를 찾아서 프로그램을 시작
{ } 블록을 사용하여 메서드의 시작과 끝을 나타냄
실행과정
- Ex01.java 프로그램실행
- 시작점인 main() 메서드를 실행
- System.out.println("Hello java");를 만나서 문자열 Hello java 출력
- main() 메서드의 {} 블록이 끝나면 프로그램 종료
- public static void main(String[] args):
- public: JVM이 외부에서 이 메소드에 접근 가능하도록 설정.
- static: 객체 생성 없이 메소드를 호출 가능.
- void: 이 메소드는 값을 반환하지 않음.
- String[] args: 프로그램 실행 시 전달받는 명령줄 인수를 문자열 배열로 받음.
- System.out.println("hello world");
- 화면에 "hello world"를 출력합니다.
접근제어자 [static] 반환타입 메소드명(매개변수) {
// 메소드 내용
}
- main 메소드는 프로그램의 시작점으로 반드시 public static void로 작성
- 메소드는 코드의 기능을 분리하여 가독성과 재사용성을 높임
코드 구조
1. 메소드 접근 제어자
- public, private, protected:
- 메소드의 접근 범위를 설정합니다.
- 접근 제어자는 클래스 외부나 다른 클래스에서 해당 메소드에 접근할 수 있는지를 결정합니다.
2. static 키워드
- static 메소드는 객체를 생성하지 않고 클래스 이름으로 호출할 수 있습니다.
- 예: 클래스명.메소드명().
3. void 키워드
- void 는 메소드가 값을 반환하지 않음을 의미합니다.
- 반환값이 없는 메소드는 보통 특정 작업만 수행합니다.
4. 반환되는 데이터 구조
- 메소드는 하나의 데이터 구조(값) 를 반환할 수 있습니다.
- 반환값이 있는 경우에는 반드시 return 키워드를 사용해야 합니다.
5. 메소드 정의
- 클래스 안에 메소드를 여러 개 자유롭게 정의할 수 있습니다.
- 각각의 메소드는 독립적인 기능을 담당합니다.
빌드만 해서 확인하기
빌드 : 컴파일을 포함하는 작업, 실행은 하지 않음
window : [ Ctrl ] + [ F9 ]
mac : [ Ctrl ] + [ R ]
# 주석 ( comment )
주석의 종류
한 줄 주석
// 이해를 돕기 위해서 설명을 달아줌
단축키 : [ Ctrl ] + [ / ]
여러 줄 주석
/* 여러 줄 주석
여러줄 주석
*/
단축키 : [ Ctrl ] + [ Shift ] + [ / ]
주석으로 처리한 코드는 실행되지 않음
자바프로그램이 읽지 않고 무시하는 부분, 사람이 읽기 위해서 사용
예)
public class Ex01 {
public static void main( String[] args) {
System.out.println("Hello java");
System.out.println("Hello java");
// System.out.println("Hello java"); 한줄 주석 - 라인 전체에 적용
/* System.out.println("Hello java");
System.out.println("Hello java"); 여러줄 주석 */
}
}
폴더 만들기
패키지란
클래스의 묶음으로 클래스를 용도별이나, 기능별로 그룹화한 것
패키지는 물리적으로 하나의 디렉터리(파일 시스템의 폴더)
클래스를 유일하게 만들어주는 식별자 역할
같은 이름의 클래스라도 서로 다른 패키지에 존재하는 것이 가능하므로,
자신만의 패키지 체계를 유지함으로써 충돌이 발생하지 않음
클래스의 분류가 용이(비슷한 것끼리 묶음).
패키지가 다르다면 동일한 클래스명을 사용할 수 있음
패키지명은 대소문자를 모두 허용하지만
클래스명과 쉽게 구분하기 위해서 소문자로 하는 것을 원칙
src > New > Package
[New → Package]
패키지명 variable
package variable;
public class Variable01 {
public static void main(String[] args) { // psvm
System.out.println("출력문"); //sout
}
}
psvm : public static void main(String [] args)
[ m ] + Enter : public static void main(String [] args)
sout : System.out.println
[ Ctrl ] +[ Alt ] + [ L ] : 코드 서식 다시 지정 ( 코드 영역 설정 후 단축키 사용 )
[ shift ] + [ Enter ] : 코드 중간에 다음 코드줄로 넘어감
[ Ctrl ] + [ G ] : 줄 이동
[ Ctrl ] + [ -/+ ] : 코드 블록 접기 , 펼치기
[ Alt ] + [ Shift ] + [ ↑/↓ ] : 코드 줄 이동
[ Ctrl ] + [ D ] : 코드 한 줄 복사
[ Ctrl ] + [ Y ] : 코드 한 줄 삭제
복제가 안될 경우
Settings > Keymap > Windows로 변경
# 변수
1) 변수란
변하는 수
하나의 값을 저장할 수 있는 기억공간
변하는 값을 프로그램에서 나타내기 위한 방법
예) 사람의 나이, 온라인 상품의 개수, 학생의 학년
2) 변수명 규칙
문자, 숫자, 언더스코어 _ , 달러사인 $ 포함가능
문자 또는 $, _ 로 시작
공백을 포함할 수 없음 , 특수문자 사용불가 ( _, $ 허용 )
한글사용가능하지만 권장하지 않음
예약어 사용불가 ( 자바언어에서 특정 의미를 갖고 있는 단어들 )
상수 : 대문자와 _ 사용
예) PI, MY_NAME, MAX_NUMBER
변수나 메서드는 낙타 표기법 ( camal case ) 사용
첫 글자 소문자로 시작 + 낙타표기법
예) dogCat , myName 등
클래스예 ) DogCat , MyName 등
변수(variable) – 하나의 값을 저장하기 위한 공간
상수(constant) – 한 번만 값을 저장할 수 있는 공간
리터럴(literal) – 그 자체로 값을 의미하는 것
예약어
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
3) 자료형 ( Data Type )
변수가 가질 수 있는 값의 형태
기본 자료형
문자 : char
숫자 : 정수, 실수
정수 : byte, short , int , long
실수 : float , double
논리 : boolean
정수형 | 문자형 | 실수형 | 논리형 | |
1byte | byte -128 ~ 127 |
boolean | ||
2byte | short -32,768 ~ 32,767 |
char | ||
4byte | int -2,147,648~2,147,647 |
foat | ||
8byte | long | double |
변수 타입 정리
byte : 표현 길이가 너무 작아서 보통 int 사용, 만약 20억 넘으면 long을 사용
파일을 바이트 단위로 다루기 때문에 파일전송, 파일 복사에 주로 사용 ( 파일을 다룰 때 )
short : 표현 길이가 너무 작아서 보통 int 사용
float : 표현 길이와 정밀도가 낮음
실수형은 double 사용
char : 문자를 하나로 표현하는 일은 거의 없음
문자 하나 표현도 String을 사용
String a ="A";
정수형 (Integer Types)
타입 | 크기 | 값 범위 | 예 |
byte | 1 byte | -128 ~ 127 | byte a = 100; |
short | 2 bytes | -32,768 ~ 32,767 | short b = 30000; |
int | 4 bytes | -2^31 ~ 2^31-1 | int c = 100000; |
long | 8 bytes | -2^63 ~ 2^63-1 | long d = 100000L; |
실수형 (Floating-point Types)
타입 | 크기 | 값 범위 | 예 |
float | 4 bytes | ±3.4x10^-38 ~ ±3.4x10^38 (7자리 정밀도) | float e = 3.14f; |
double | 8 bytes | ±1.7x10^-308 ~ ±1.7x10^308 (15자리 정밀도) | double f = 3.14159; |
문자형 (Character Type)
타입 | 크기 | 값 범위 | 예 |
char | 2 bytes | 0 ~ 65,535 (유니코드 값) | char g = 'A'; |
논리형 (Boolean Type)
타입 | 크기 | 값 범위 | 예시 |
boolean | 1 bit | true 또는 false | boolean h = true; |
예1)
package variable;
public class Variable01 {
public static void main(String[] args) {
int a; // 변수 선언
a = 20; // 변수 초기화
System.out.println(a); // 변수의 값 출력
System.out.println(a);
}
}
예2)
package variable;
public class Variable01 {
public static void main(String[] args) {
int score = 100;
char ch = 'A';
String str = "abc";
boolean done = true;
byte b = 127;
short s = 32767;
System.out.println(score);
System.out.println(ch);
System.out.println(str);
System.out.println(done);
System.out.println(b);
System.out.println(s);
}
}
예3)
public class Type01 {
public static void main(String args[]) {
byte byteValue1 = 2;
byte byteValue2 = 4;
byte byteResult = (byte)(byteValue1 + byteValue2);
System.out.println("Byte: " + byteResult);
short shortValue1 = 2;
short shortValue2 = 4;
short shortResult = (short)(shortValue1 + shortValue2);
System.out.println("Short: " + shortResult);
int intValue1 = 2;
int intValue2 = 4;
int intResult = intValue1 + intValue2;
System.out.println("Int: " + intResult);
long longValue1 = 2L;
long longValue2 = 4L;
long longResult = longValue1 + longValue2;
System.out.println("Long: " + longResult);
float floatValue1 = 2.0f;
float floatValue2 = 4.0f;
float floatResult = floatValue1 + floatValue2;
System.out.println("Float: " + floatResult);
double doubleValue1 = 2.0;
double doubleValue2 = 4.0;
double doubleResult = doubleValue1 + doubleValue2;
System.out.println("Double: " + doubleResult);
boolean booleanValue = true;
System.out.println("Boolean: " + booleanValue);
char charValue = 'A';
System.out.println("Char: " + charValue);
}
}
# 출력
System.out.print
내용을 출력하지만 줄 바꿈은 하지 않음.
System.out.print(내용);
System.out.print("Hello");
System.out.print("World!");
HelloWorld!
System.out.println
문자열을 출력한 후 줄 바꿈(\n)을 자동으로 삽입.
System.out.println(내용);
System.out.println("Hello, World!"); // 출력: Hello, World! (줄 바꿈 포함)
System.out.println(123); // 출력: 123 (줄 바꿈 포함)
System.out.println(true); // 출력: true (줄 바꿈 포함)
System.out.printf
문자열 형식을 지정하여 출력. 줄 바꿈은 자동으로 포함되지 않음
System.out.printf(포맷 문자열, 값1, 값2, ...);
System.out.printf("Hello, %s!\n", "World"); // 출력: Hello, World! (줄 바꿈 포함)
System.out.printf("Age: %d\n", 25); // 출력: Age: 25 (줄 바꿈 포함)
System.out.printf("Score: %.2f\n", 95.5); // 출력: Score: 95.50 (소수점 둘째 자리까지 출력)
- %d: 정수 출력
- %f: 실수 출력
- %s: 문자열 출력
- %c: 문자 출력
- %b: 불리언 값 출력
- \n: 줄 바꿈
서식 | 설명 |
%b | bool 값을 형식화합니다. (true 또는 false) |
%d | 정수를 10진수로 형식화합니다. |
%f | 부동 소수점 숫자를 형식화합니다. |
%s | 문자열을 형식화합니다. |
%c | 문자를 형식화합니다. |
%x | 정수를 16진수로 형식화합니다. |
%o | 정수를 8진수로 형식화합니다. |
%e | 부동 소수점 숫자를 지수 표기법으로 형식화합니다. |
포맷 | 설명 | 형식 | 값 |
%d | 10진수 정수 | %d | 123 |
%f | 실수 (소수점 포함) | %.2f (소수점 2자리) | 123.45 |
%s | 문자열 | %s | "Hello" |
%c | 단일 문자 | %c | 'A' |
%b | 불리언 값 | %b | true |
\n | 줄 바꿈 | "Line1\nLine2" | Line1 Line2 |
System.out.printf("이름: %s, 나이: %d, 점수: %.1f\n", "희원", 25, 89.5);
// 출력: 이름: 희원, 나이: 25, 점수: 89.5
System.out.printf를 사용 시 줄 바꿈을 포함하려면 \n을 명시적으로 포함
# 형변환 ( type conversion )
1) 암시적 형변환(Implicit Casting):
작은 데이터 타입에서 큰 데이터 타입으로 자동으로 형변환되는 경우를 말합니다. 이러한 형변환은 데이터의 손실 없이 안전하게 수행됩니다. 암시적 형변환은 작은 크기의 데이터 타입이 큰 크기의 데이터 타입으로 확장되는 경우에 발생합니다.
예를 들어, int를 double로 변환하거나 byte를 int로 변환하는 경우 등이 있습니다.
int num1 = 10;
double num2 = num1; // 암시적 형변환
double num1 = 10.5;
int num2 = num1;
// 에러 발생: double 타입을 int 타입으로 변환하는데 데이터의 손실이 발생할 수 있음
public class Main {
public static void main(String[] args) {
// byte 타입에서 int 타입으로의 자동 형변환
byte b = 10;
int i = b; // byte에서 int로 자동 형변환
System.out.println("int 형 변수 i의 값: " + i);
// short 타입에서 double 타입으로의 자동 형변환
short s = 20;
double d = s; // short에서 double로 자동 형변환
System.out.println("double 형 변수 d의 값: " + d);
// char 타입에서 int 타입으로의 자동 형변환
char c = 'A';
int j = c; // char에서 int로 자동 형변환
System.out.println("int 형 변수 j의 값: " + j);
}
}
byte, short, char 타입의 변수를 각각 int 또는 double 타입으로 자동 형변환하고 있습니다.
같은 타입끼리의 계산은 같은 타입의 결과
int + int 는 int 를, double + double 은 double 의 결과
서로 다른 타입의 계산은 큰 범위로 자동 형변환
int + long 은 long + long 으로 자동 형변환
int + double 은 double + double 로 자동 형변환
2) 명시적 형변환(Explicit Casting):
큰 데이터 타입에서 작은 데이터 타입으로 변환하는 것이며, 이 경우 데이터의 손실이 발생할 수 있습니다. 따라서 명시적으로 형변환을 지정해주어야 합니다.
이러한 형변환은 프로그래머가 직접 지정해주어야 하며, 명시적 형변환 연산자인 괄호 ()를 사용하여 수행됩니다.
double num1 = 10.5;
int num2 = (int) num1; // 명시적 형변환
소수점 이하의 숫자는 버려지고 정수 부분만이 대상 데이터 타입에 할당됩니다
작은 자료형을 큰 변수에 할당할 때 더 큰 자료형으로 변환합니다.
[예] int형 변수에 short 값을 할당하는 경우
자바가 대신 작업을 수행하고 short 값을 int로 변환하여 int 변수에 저장함
형변환 int long double 작은 범위에서 큰 범위로는 대입할 수 있습니다.
이것을 묵시적 형변환 또는 자동 형변환이라고 합니다.
예) 명시적 형변환
public class Main {
public static void main(String[] args) {
// double 타입에서 int 타입으로의 명시적 형변환
double d = 10.5;
int i = (int) d; // double에서 int로 명시적 형변환
System.out.println("int 형 변수 i의 값: " + i);
// long 타입에서 int 타입으로의 명시적 형변환
long l = 10000000000L;
int j = (int) l; // long에서 int로 명시적 형변환
System.out.println("int 형 변수 j의 값: " + j);
// int 타입에서 byte 타입으로의 명시적 형변환
int k = 200;
byte b = (byte) k; // int에서 byte로 명시적 형변환
System.out.println("byte 형 변수 b의 값: " + b);
}
}
형변환 순서
int intNum = 30;
doubleNum = intNum
doubleNum = (double) intNum //형 맞추기
doubleNum = (double) 30 //변수 값 읽기
doubleNum = 30.0 //형변환
큰 범위에서 작은 범위의 대입은 문제가 발생 이때는 명시적 형변환을 사용해야 합니다.
소수점 버림,오버플로우
연산과 형변환
같은 타입은 같은 결과
서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어납니다.
# 연산자
산술 연산자, 비교 연산자, 논리 연산자, 비트 연산자, 대입 연산자, 조건부 연산자
1. 산술 연산자 (Arithmetic Operators)
연산자 | 설명 | 예시 | 결과 |
+ | 덧셈 | a + b | a와 b의 합 |
- | 뺄셈 | a - b | a에서 b를 뺌 |
* | 곱셈 | a * b | a와 b의 곱 |
/ | 나눗셈 | a / b | a를 b로 나눈 몫 |
% | 나머지 | a % b | a를 b로 나눈 나머지 |
2. 비교 연산자 (Relational Operators)
연산자 | 설명 | 예시 | 결과 |
== | 두 값이 같은지 비교 | a == b | 같으면 true |
!= | 두 값이 다른지 비교 | a != b | 다르면 true |
> | 왼쪽이 큰지 비교 | a > b | 크면 true |
< | 오른쪽이 큰지 비교 | a < b | 작으면 true |
>= | 왼쪽이 크거나 같은지 | a >= b | 크거나 같으면 true |
<= | 오른쪽이 크거나 같은지 | a <= b | 작거나 같으면 true |
** equals()
Java의 Object 클래스에서 제공하는 메서드로, 두 객체가 같은지를 비교하는 데 사용
Object 클래스에서 기본적으로 구현되어 있으며, 기본 구현은 참조값(주소값) 을 비교 ,두 객체가 같은 메모리 주소를 가리키고 있는지를 확인
equals()와 ==의 차이
구분 | == 연산자 | equals() 메서드 |
비교 대상 | 참조값(주소값) 비교 | 기본 구현은 참조값(주소값) 비교 (오버라이드하면 내용 비교 가능) |
사용 예 | a == b | a.equals(b) |
활용 목적 | 두 객체가 같은 객체인지 확인 | 두 객체가 동일한 내용인지 확인 |
3. 논리 연산자 (Logical Operators)
연산자 | 설명 | 예시 | 결과 |
&& | 논리 AND | a && b | 둘 다 true면 true |
|| | 논리 OR | a || b | 둘 중 하라라도 true면 true |
! | 논리 NOT | !a | a가 false면 true |
4. 비트 연산자 (Bitwise Operators)
연산자 | 설명 | 예시 | 결과 |
& | 비트 AND | a & b | 둘 다 1이면 1 |
` | ` | 비트 OR | `a |
^ | 비트 XOR | a ^ b | 다르면 1, 같으면 0 |
~ | 비트 NOT | ~a | 비트를 반전 |
<< | 비트 왼쪽 이동 | a << 2 | 비트를 왼쪽으로 이동 |
>> | 비트 오른쪽 이동 | a >> 2 | 비트를 오른쪽으로 이동 |
>>> | 비트 논리적 오른쪽 이동 | a >>> 2 | 부호 없이 오른쪽 이동 |
5. 대입 연산자 (Assignment Operators)
연산자 | 설명 | 예시 | 결과 |
= | 값 대입 | a = b | b를 a에 대입 |
+= | 더한 결과 대입 | a += b | a = a + b |
-= | 뺀 결과 대입 | a -= b | a = a - b |
*= | 곱한 결과 대입 | a *= b | a = a * b |
/= | 나눈 결과 대입 | a /= b | a = a / b |
%= | 나머지 결과 대입 | a %= b | a = a % b |
6. 조건부 연산자 (Ternary Operator)
연산자 | 설명 | 예시 | 결과 |
? : | 조건에 따른 값 반환 | a > b ? a : b | a 또는 b 반환 |
7. 기타 연산자 (Miscellaneous Operators)
연산자 | 설명 | 예시 | 결과 |
instanceof | 객체가 특정 클래스의 인스턴스인지 확인 | obj instanceof Class | true 또는 false |
new | 객체 생성 | new MyClass() | 객체 생성 |
. | 객체의 멤버 접근 | obj.field | 객체의 필드 값 접근 |
[] | 배열의 요소 접근 | arr[0] | 배열의 첫 번째 요소 |
(type) | 형 변환 | (int) a | a를 int로 변환 |
: | 라벨 지정 | label: statement | 특정 위치 참조 |
- 연산자 우선순위:
- 연산자 간의 우선순위가 다르므로, 필요한 경우 괄호를 사용하여 명시적으로 연산 순서를 지정합니다.
- 우선순위가 높은 연산자가 먼저 실행됩니다. (예: 곱셈 *은 덧셈 +보다 우선)
- 단항 연산자:
- ++ (증가), -- (감소)와 같은 단항 연산자는 값을 1씩 증가하거나 감소시킵니다.
- 예: a++, --b.
- 논리와 비트 연산의 차이:
- 논리 연산자는 true/false를 다루며, 비트 연산자는 각 비트를 조작합니다.
# 특수문자 표시
특수 문자는 백슬래시(\)로 시작하여 이스케이프 시퀀스로 사용
문자 | 설명 | 예시 | 결과 |
\n | 새 줄 (줄 바꿈) | System.out.println("Hello\nWorld"); | Hello World |
\t | 탭 (수평 탭) | System.out.println("Hello\tWorld"); | Hello World |
\b | 백스페이스 (뒤로 한 글자 삭제) | System.out.println("Hello\bWorld"); | HellWorld |
\r | 캐리지 리턴 (커서를 줄의 처음으로 이동) | System.out.println("Hello\rWorld"); | World |
\\ | 백슬래시 출력 | System.out.println("Hello\\World"); | Hello\World |
\' | 작은따옴표 출력 | System.out.println('\''); | ' |
\" | 큰따옴표 출력 | System.out.println("\"Hello\""); | "Hello" |
\f | 폼 피드 (페이지 넘김 - 잘 쓰이지 않음) | ||
\uXXXX | 유니코드 문자 (16진수로 표현된 문자) | System.out.println("\u2764"); | ❤ |
예)
System.out.println("첫 번째 줄\n두 번째 줄");
System.out.println("탭\t사용");
System.out.println("이 문자열에는 \"따옴표\"가 있습니다.");
System.out.println("작은 따옴표: \'");
System.out.println("백슬래시: \\");
Output
첫 번째 줄
두 번째 줄
탭 사용
이 문자열에는 "따옴표"가 있습니다.
작은 따옴표: '
백슬래시: \
1. 줄바꿈과 탭
System.out.println("안녕하세요\n자바입니다");
System.out.println("이름\t나이\t직업");
System.out.println("홍길동\t30\t프로그래머");
출력
안녕하세요
자바입니다
이름 나이 직업
홍길동 30 프로그래머
2. 큰따옴표과 작은따옴표
System.out.println("그는 \"프로그래머\"라고 말했다.");
System.out.println('\'문자\' 출력 예제');
--------------------
그는 "프로그래머"라고 말했다.
'문자' 출력 예제
3. 백슬러시 , 유니코드
System.out.println("C:\\Users\\Documents");
----------------------------
C:\Users\Documents
----------------------------
System.out.println("\u2665"); // ♥
System.out.println("\uAC00"); // 가
# 기본형 과 참조형
1. Primitive Type (기본형)
- 특징:
- 사용하기 전에 반드시 선언해야 함.
- 특정 값을 직접 저장하는 데이터 타입.
- 플랫폼(OS)에 관계없이 크기와 속성이 고정되어 있음.
- 객체가 아닌 데이터 타입으로, null 값을 가질 수 없음.
- 종류 및 크기:
- 정수형: byte (1 byte), short (2 byte), int (4 byte), long (8 byte)
- 실수형: float (4 byte), double (8 byte)
- 문자형: char (2 byte) (UTF-16으로 문자 저장)
- 논리형: boolean (1 bit)
int age = 25; // 정수형
double height = 175.5; // 실수형
char grade = 'A'; // 문자형
boolean isActive = true; // 논리형
2. Reference Type (참조형)
- 특징:
- java.lang.Object를 상속받는 모든 타입.
- 기본형을 제외한 나머지 데이터 타입 (클래스, 배열, 인터페이스 등).
- 데이터의 주소(참조값)를 저장하며, 해당 주소가 가리키는 객체를 통해 실제 데이터에 접근.
- 기본값으로 null을 가질 수 있음.
- 예시:
- 클래스(String, 사용자 정의 클래스)
- 배열(int[], String[])
- 인터페이스
- 열거형(enum)
String name = "John"; // 문자열 (String은 참조형)
int[] scores = {85, 90}; // 배열
MyClass obj = new MyClass(); // 사용자 정의 클래스
구분 | Primitive Type (기본형) | Reference Type (참조형) |
저장 방식 | 값 자체를 저장 | 객체의 참조값(주소)을 저장 |
null 값 허용 여부 | 불가능 | 가능 |
메모리 사용 | 스택(Stack) | 힙(Heap)에 객체 저장 후 주소 저장 |
기본 데이터 | 숫자, 문자, 논리값 | 클래스, 배열, 인터페이스 등 |
크기 고정 여부 | 고정 | 클래스 정의에 따라 다름 |
'java' 카테고리의 다른 글
[ JAVA ] class 클래스 (2) | 2024.05.31 |
---|---|
[ JAVA ] 클래스 (0) | 2024.05.17 |
[ java ] Array ( 배열 ) , 메서드 (0) | 2024.01.31 |
[ java ] 제어문 - 조건문 , 반복문, 분기문 (1) | 2024.01.29 |
[ java ] 인텔리제이 프로그램 설치 및 설정 (0) | 2024.01.07 |