Home [Java] 기본 문법
Post
Cancel

[Java] 기본 문법

Java의 특징

1.운영체제의 독립적

  • JRE(Java Runtime Environment)가 설치되어 있는 모든 운영체제에서 실행 가능.
  • JRE : JVM(자바 가상머신) + 표준 클래스 라이브러리.

2.객체 지향 언어(Object Oriented Programming, OOP)

  • 모든 기능은 객체로 만들어 사용.
  • 유지보수가 쉽고 확장성이 높다.

3.함수형 프로그래밍 지원

  • 자바 8버전부터 함수형 프로그래밍 지원 문법인 람다식, 스트림 추가.

4.자동 메모리 관리(Garbage Collection)

  • 자바는 가비지 컬렉터(Garbage Collertor)를 실행시켜 메모리 관리 수고를 덜어 핵심 코드에 집중할수 있다.

JVM과 JDK

JVM(Java Virtual Machine)

  • 자바는 컴파일러를 통해 기계어로 변환되는 언어.
    • 컴파일 : 특정 프로그래밍 언어를 기계어로 번역하는 과정.
    • .java file → javac → .class file → JVM → OS
      • JVM : 자바 프로그램 실행 도구. Bytecode를 OS에 맞게 기계어로 변환.

Java 설치 관련 도구

  • JRE(Java Runtime Enviroment) : JVM + 표준 클래스 라이브러리
  • JDK(Java Development Kit) : JRE + 개발에 필요한 도구

타입(Type)

기본타입(primitive type)

  • 값 저장 시, 데이터의 실제 값 저장

정수타입 byte(1byte), short(2byte), int(4byte), long(8byte)

  • long 타입 할당 시 뒤에 ‘L’ 붙여서 할당.
1
long longNumber = 1234567890L;
자료형크기데이터타입범위
byte1byte정수-128 ~ 127
short2byte정수-32,768 ~ 32,767
int4byte정수-2,147,483,648 ~ 2,147,483,647
long8byte정수-9,223,372,036,854,775,807 ~ 9,223,372,036,854,775,807
  • 언더플로우 < 타입범위 < 오버플로우
1
2
3
4
5
6
7
 byte underflow = -128;
 underflow--;
 System.out.println(underflow); // 127

 byte overflow = 127;
 overflow++;
 System.out.println(overflow); // -128
  • 값 할당 시, float는 뒤에 ‘f’, double은 ‘d’를 붙임.(단, double은 생략 가능)
1
2
float floatNumber = 5.5f;
double doubleNumber = 5.5555d; // 5.5555 가능
자료형크기데이터타입범위
float4byte실수(부동 소수점수)+-1.5 * 10-⁴⁵ ~ +- 3.4*10³⁸
double8bytefloat보다 2배 정밀한 실수+-5.0_10-³²⁴ ~ 1.7_10³⁰⁸
  • 논리타입 boolean(1byte)
    • 0과 1로 표현하므로 1bit로 표현 가능
    • JVM의 데이터 최소 단위가 1byte
  • 문자타입 char(2byte)
    • 유니코드기반
    • 하나의 문자만 저장 가능 (ex, ‘a’)
    • 작은 따옴표만 사용
  • 참조타입(reference type)
    • 값 저장 시, 데이터의 주소 값 저장
    • 객체 주소 저장, 8개의 기본형 제외한 나머지 타입(클래스)
  • 타입 변환
    • 자동 타입 변환
      • 타입크기가 작은 타입에서 큰 타입으로의 변환
      • 덜 정밀한 타입에서 더 정밀한 타입으로의 변환
1
2
byte byteValue = 10; 
int intValue = byteValue;
    • 수동 타입 변환

      • 타입 크기가 큰 타입에서 작은 타입으로의 변환

        1
        2
        
        long longNum = 1; 
        byte byteNum = (byte)longNum;
        
      • 참조타입에서의 메서드 사용 가능

        1
        2
        3
        4
        
        StringBuilder sb = new StringBuilder(); 
        sb.append("Hello "); 
        sb.append("World!"); 
        String hw = sb.toString(); // Hello World! 출력
        

문자열(String)

  • 문자열은 참조타입

  • 문자열은 되도록 리터럴로 생성.

    1
    2
    3
    4
    5
    6
    
    String str1 = "apple" // 리터럴 
    String str2 = "apple; // 리터럴 
    String str3 = new String("apple"); // new 키워드로 문자열 객체 생성
    System.out.println(str1 == str2); // true 
    System.out.println(str1 == str3); // false 
    System.out.println(str1.equals(str3)); // true
    
  • 🔗문자열 메서드

  • 문자열 합치기

  • 문자열 쪼개기 🔗StringTokenizer

연산자

산술연산자기능비교연산자기능
+더하기n < m / n > mn이 m보다 작다/n이 m보다 크다
-빼기n <= m / n >= mn과 m이 작거나(크거나) 같다
*곱하기n == mn과 m이 같다
/나누기n != mn과 m이 다르다 (not 연산자)
%나머지n && mn과 m (and 연산자)
--n ⅼⅼ mn 혹은 m (or 연산자)

증감연산자

1
2
3
4
5
6
7
8
num++; // num + 1; 과 같다 num--; // num - 1; 과 같다
// 단, 위치에 따라 연산순서가 달라진다.

int num1 = 10;
System.out.println(num1++); // 10 출력 (후위형 증감연산자)

num1 = 10;
System.out.println(++num1); // 11 출력 (전위형 증감연산자)
  • 후위형 증감연산자 : 기존의 값으로 코드를 먼저 실행시킨 다음에 증감연산 수행
  • 전위형 증감연산자 : 증감연산을 먼저 수행시킨 다음, 결과값으로 코드를 실행

삼항연산자

조건식 ? 조건식이 true일때 실행문 : 조건식이 false일때 실행문

연산자 우선순위

우선순위연산자내용
1(), []괄호, 대괄호
2! , ~ , ++ , –부정 / 증감 연산자
3*, / , %곱셈 / 나눗셈 연산자
4< , <= , > , >=대소 비교 연산자
5&&AND 연산자
6ⅼⅼOR 연산자
7? :삼항연산자
8= , += , -= , /= , %=대입 / 할당 연산자

콘솔입출력

콘솔 출력

1
2
3
4
5
System.out.print("Hello World");
System.out.print("Nice to meet you!);
    
> 출력
> Hello WorldNice to meet you!
  • 단순 출력 System.out.print()
1
2
3
4
5
6
System.out.println("Hello World");
System.out.println("Nice to meet you!);
    
> 출력
> Hello World
> Nice to meet you!
  • 줄바꿈 출력 System.out.println()

  • 형식 출력 System.out.printf()
  • printf에서의 f는 formatted 의 약자로, 출력할 형식을 지시해줄수 있다.
지시자출력 포맷
%bBoolean
%d10진수
%o8진수
%x, %X16진수
%c문자
%s문자열
%n줄바꿈
1
2
3
4
5
6
import java.util.Scanner; // (1)

Scanner s = new Scanner(System.in); // (2)
String input = s.nextLine(); // (3)

System.out.println(input); // (4)
  • 콘솔 입력
  1. java.util에 저장되어있는 데이터 입력 프로그램 Scanner을 불러온다.
  2. Scanner 클래스로 객체를 생성한다.
    • 객체를 생성할때 new 연산자를 통해 생성하는데 이는 추후 정리할 예정.
  3. 입력받은 데이터를 변수 input에 할당한다.
    • 타입은 그때마다 변경가능하다.
    • 타입마다 nextline(), nextInt(), nextFloat() 등을 사용한다.
  4. 입력받은 데이터를 출력한다.

조건문

  • 특정 조건 해당시 특정 부분만 실행 가능

if - else 문

1
2
3
4
5
6
7
8
if (조건식1) {
    // 조건식1이 true일때 실행되는 실행문
} else if (조건식2) {
   	// 조건식1은 false이고 조건식2는 true일때 실행되는 실행문
} else {
   	// 위 모든 조건이 false일때 실행되는 실행문
    // 생략 가능
}
1
2
3
4
5
6
7
8
9
10
11
12
if (5 < 10) {
     return true;
  } else {
     return false;
  }
    
  ---------------------
    
  if (5 < 10) return true;
  else return false;
    
  // 위 두 코드는 같다.
  • 조건식은 boolean값으로 평가되어야한다
  • {}를 블록이라고도 하는데 블록에 들어가는 식이 한줄일 경우 {} 생략 가능

switch 문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
	public static void main(String[] args) {
    int randomNum = (int)(Math.random() * 10) + 1; // 1 ~ 10 까지 랜덤으로 숫자 뽑기
    
    switch (randomNum) {
    	case 1 :
        	System.out.println("1입니다");
            break;
        case 2 :
        case 3 :
        	System.out.println("2랑 3입니다");
        case 4 :
        	System.out.println("4도 있어요!");
            break;
        default :
        	System.out.println("5 ~ 10입니다");
     }
  • if - else 문과 달리 조건문이 아닌 변수가 어떤 값을 갖느냐에 따라 실행문이 작동한다.
  • break;를 적어주면 밑의 case를 실행하지 않고 반복문을 빠져나간다
  • default는 모든 case에 해당하지 않으면 실행한다

반복문

for 문

1
2
3
for (int i = 0; i < 100; i++) {
  	실행문
}
  • 조건문이 true인 동안 계속 반복
  • 반복할 횟수를 알고있는 경우 사용하면 좋다

향상된 for문 (for-each 문)

1
2
3
4
int[] nums = {1, 2, 3, 4, 5};
  for (int num : nums) {
  	실행문
}
  • 배열 요소를 순회하는 경우 사용하기 좋다

while 문

1
2
3
4
int num = 0;
  while(num < 10) {
  	num++;
}
  • 반복횟수를 모를 때 사용하면 좋다
  • 조건문이 true인 동안 계속 반복

do - while 문

1
2
3
4
5
do {
 	System.out.println("무조건 1번 실행");
} while (num < 10) {
 	num++;
}
  • do는 무조건 한번 실행 후 while문 실행

  • break : 반복문 종료
  • continue : 다음 반복 실행

배열

  • 배열의 선언
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 선언 + 초기화
int[] arr1 = new int[5]; // 기본값은 0이므로 현재 {0, 0, 0, 0, 0}
String[] strArr1 = new String[5]; // 기본값은 null이므로 현재 {null, null, null, null, null}
// []에 수를 지정하는건 배열 요소의 개수를 지정해주는것
  
// 선언 + 초기화 + 값 할당
// 두가지 방법이 있다
int[] arr2 = new int[] {1, 2, 3, 4, 5};
int[] arr3 = {1, 2, 3, 4, 5};
  
String[] strArr2 = new String[] {"apple", "kiwi", "melon", "mango", "berry"};
String[] strArr3 = {"apple", "kiwi", "melon", "mango", "berry"};
  
// 선언 따로 할당 따로
int[] arr4;
arr4 = {1, 2, 3, 4 5};
  • 배열 길이, 인덱스
1
2
3
4
5
6
7
8
9
10
11
12
int[] arr1 = {1, 2, 3, 4, 5};
 
System.out.println(arr1.length);
System.out.println(arr1[4]);
 
> 출력
> 5
> 5
// 인덱스는 1이 아니라 0부터 시작한다.
// 즉, arr1 배열을 예로 들면
// { 1, 2, 3, 4, 5} 각 요소들의 인덱스는
//   0  1  2  3  4  인 것이다

주의❗

  • 문자열의 길이를 구할때는 length()
1
2
3
4
5
6
String str = "Hello";
   
System.out.println(str.length());
   
> 출력
> 5
  • 다차원배열에서 2차원 배열은 표와 비슷한 형태
1
2
3
4
5
6
7
int[][] arr; // 2차원 배열
int[][] arr1 = new int[3][3];
/*{
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}
}*/
  • 가변배열 : 내부배열의 길이를 정하지않음
1
int[][] arr = new int[5][];
This post is licensed under CC BY 4.0 by the author.