JAVA 문법#1

26034 단어 자바Java문법Java

자바의 특징

  1. Wirte Once, Run Anywhere
    java파일은 컴파일러에 의해 class파일로 컴파일되며, 바이트코드로 바뀐다.
    JVM(Java Virtual Machine)을 통해 운영체제에 상관없이 독립적으로 실행된다.
  2. Garbage Collection
    자바는 더 이상 사용하지 않는 메모리를 자동으로 정리해준다. 이 기능을 Garbage Collection이라고 한다.
  3. 자바의 객체지향 특징 4가지
    Abstraction(추상화), Polymorphism(다형성), Inheritance(상속), Encapsulation(캡슐화)

데이터의 종류

기본형(Primitive Type)

  • 미리 정해진 크기의 메모리 크기로 표현하고 변수 자체에 값을 저장한다.

참조형(Reference Type)

  • 크기가 미리 정해질 수 없는 데이터의 표현이고 변수에는 실제 값을 참조할 수 있는 주소만 저장한다.

형변환

  • 변수의 타입을 다른 타입으로 변환.
  • 기본형은 기본형끼리. 참조형은 참조형끼리 변환 가능
  • 기본 타입과 참조형의 형 변환을 위해서는 Wrapper 클래스 사용 (ex. Integer, Double 클래스)
double a = 13.5;
int b = (int) a;    //a = 13.5, b = 13    -> 명시적 형변환

byte b = 5;
int i = b;      // 묵시적 형변환   i = 5

기본형의 형 변환에서 작은타입->큰타입으로 변환할 때는 값 손실이 없음.
But, 큰타입->작은타입으로 변환할 때는 값 손실이 있음.

  • 표현 범위가 커지는 방향(값의 크기나 타입의 크기가 아님)으로 값을 할당할 때에는 묵시적 형변환 발생
    byte -> short -> int -> long -> float -> double
    char -> int -> long -> float -> double
  • 명시적 형변환은 값 손실이 발생할 수 있으므로 프로그래머가 형변환 진행함.
  • 묵시적 형변환은 JVM이 자동으로 해줌.

연산자

  • 여러 종류와 우선순위, 결합 방향이 있음

    ++, --연산자는 변수에만 사용 가능

& vs &&, | vs ||

  • &, |: 앞 뒤에 있는 두 개의 피연산자 모두 검사.
  • &&, ||: 앞의 피연산자를 검사해서 조건에 맞지 않으면 뒤의 피연산자는 검사 안함.
int a = 5;
int b = 10;

System.out.println((a+=5) > 8 | (b-=5) > 8);      // true
System.out.println("a = " + a + ", b = " + b);    // a = 10, b = 5

a = 5;
b = 10;

System.out.println((a+=5) > 8 || (b-=5) > 8);      // true
System.out.println("a = " + a + ", b = " + b);    // a = 10, b = 10
// 앞의 조건식이 true이므로 뒤의 피연산자는 실행 안됨.

조건문

if문

  • 논리형(boolean)이나 조건식, 논리형을 반환하는 메소드 사용할 수 있음.
int a = sc.nextInt();

if (a == 1) {
// 로직 실행
} else if (a == 2) {
// 로직 실행
} else if (a == 3) {
// 로직 실행
} else {
// 로직 실행
}

switch

  • 정수로 나타낼 수 있는 기본형 타입 사용.(byte, short, char, int)
  • 위 기본형들의 Wrapper 클래스인 Byte, Short, Char, Integer 객체와 String 객체도 사용 가능.
  • Enum타입이나 위의 정수 타입들을 리턴하는 메소드 사용 가능.
int x = 3;

switch(x) {
    case 1: // 로직 실행
    case 2: // 로직 실행
    case 3: // 로직 실행
    case 4: // 로직 실행
    case 5: break;
    case 6: // 로직 실행
}
// 위의 switch문을 실행하면 case 3,4,5가 실행됨.

break문을 만나야 switch문의 실행이 멈추기 때문에 꼭 멈추고 싶은 곳에 break를 작성해야 함. ex) case 3만 실행시키고 싶으면 case 3: (로직 작성); break;

삼항 연산자

  • (조건식) ? 값1 : 값2;
  • 조건식이 true이면 값1, false이면 값2를 return함.
String s;
int a = 10;
s = (a > 5) ? "정답" : "틀림";    // s = 정답

반복문

for문

  • for (변수 초기화; 반복 조건; 증감식) {실행문}
int sum = 0;

for (int i = 1; i < 10; i++) {
    sum += i;
}
System.out.println(sum);    sum = 1+2+3+4+5+6+7+8+9

while문

  • while(조건문) {실행문 및 증감식}
int i = 1;
int sum = 0;
while(i < 10) {
    sum += i;
    i++;
}
System.out.println(sum);    sum = 1+2+3+4+5+6+7+8+9

do - while문

  • do {실행문 및 증감식} while(조건문);
int i = 1;
int sum = 0;
do {
    sum += i;
    i++;
}while(i < 10)

System.out.println(sum);    sum = 1+2+3+4+5+6+7+8+9
  • while문과 do - while문의 차이
    while문은 처음부터 조건문이 참이어야 실행.
    do - while문은 처음은 조건문과 관계없이 무조건 한번 실행.

    for문: - 초기값, 조건식, 증감식의 위치가 명확. - 예측 가능한 반복일 때 많이 사용. - 배열의 index증감할 때 많이 활용
    while문: - 예측이 가변적일 때 많이 사용. - index보다 break, continue 많이 활용.
    break: 반복문을 중단하는 기워드
    continue: 해당 조건의 경우에만 수행하지 않고 다음 조건으로 반복문 실행.

배열

  • 동일한 타입의 데이터 0개 이상을 하나의 연속된 메모리 공간에서 관리하는 것.
  • 한 번 생성하면 크기 변경이 불가능.
  • 개별 요소는 값 변경 가능. 삭제는 불가능.

배열의 생성

int[] list = new int[5];    
// int타입의 데이터 5개를 저장할 수 있는 배열을 메모리에 생성.
// 생성한 배열을 list라는 변수에 할당.
// list라는 변수는 메모리에 있는 배열을 가리키는 referecne타입 변수. (list에는 배열의 첫 시작 주소값이 담겨있음.)
  • index 번호로 각 요소에 접근 가능.
  • index 번호는 0부터 시작.
int[] a = {1,2,3,4};
int[] b = new int[]{1,2,3,4};
// 생성과 동시에 할당한 값으로 초기화
// {}를 통한 배열 생성은 변수 선언과 동시에 해야 가능.

char[] c;
c = {'a', 'b', 'c'}     //이런 식으로는 불가능.

향상된 for문

  • 배열이나 Collection에서 많이 사용.
  • index로 접근하지 않고 요소에 직접 접근.
int list = {9, 8, 5, 4}
for (int i : list) {
    System.out.print(i + " ");    // 9 8 5 4
}
// 변수 i를 통해 list배열 안의 요소들에 순차적으로 하나씩 접근 가능.

2차원 배열

  • 1차원 배열이 동일한 데이터를 연속적으로 관리하는 것이라면, 2차원 배열은 그 배열을 관리하는 배열.
int[][] list = new int[3][4]; // 3행4열짜리 2차원 배열 선언 및 생성.
list[0][2] = 1;  // list의 0행2열에 1이라는 값 할당.

int[][] list2 = {{1,2,3}, {9,8,7}, {4,6,5}}; // 선언, 생성, 할당 동시에 가능

int[][] list3 = new int[3][];  // 1차 생성 후
list3[0] = new int[3];         // 2차로 필요에 따라서 각 행의 열 길이가 다르게 생성 가능.
list3[1] = new int[2];         // 2차로 필요에 따라서 각 행의 열 길이가 다르게 생성 가능.
list3[2] = new int[5];         // 2차로 필요에 따라서 각 행의 열 길이가 다르게 생성 가능.

int i = 0;
int[] ilist = new int[4];
int[][] ilist2 = new int[3][5];
// i는 정수형 값을 저장.
// ilist는 정수형 배열의 첫 주소를 저장.
// ilist2는 정수형 배열의 첫 주소를 저장하는 배열의 첫 주소를 저장. 즉, ilist2는 int[]를 저장.

좋은 웹페이지 즐겨찾기