본 게시글은 대학 전공수업을 들으며 노션에 정리한 내용을 블로그로 옮긴 것으로, 에디터 차이로 인해 일부 수식, 서식, 내용 등이 빠져 있을 수 있습니다.

노션 웹을 통해 최적화된 형태로 읽으시길 권해드립니다.(➡️ 노션 링크)

변수와 자료형

변수의 종류

데이터필드

  • 인스턴스 변수 : non-static 필드 -> 개별 객체가 소유
  • 클래스 변수 : static 필드 -> 동종 객체간 공유하는 변수(정적)

전역변수 : 클래스 내에서 선언된 변수

파라미터 : 메소드 호출 시 전달하는 값을 저장하기 위한 변수

지역변수

  • 블록 내에서 선언된 변수, 블록이 종료될 때 까지 유효함
  • 초기값을 지정한 후 사용해야함
  • 접근 제어자 사용x

데이터 필드(인스턴스 변수 or 클래스 변수)

  • 선언된 클래스 내부에서 사용
  • 클래스 외부에서 사용여부 → 접근제어자(access modifier)에 따라 다름

기본자료형 종류

  • 정수형 : byte, short, int, long
  • 실수형 : float, double
  • 문자형 : char
  • 논리형 : boolean

위 값들은 저장 공간에 값을 저장함.

리터럴

상수

한번 할당되면 변경할 수 없는 변수

final int nConst = 3;

리터럴

소스코드에서 입력한 데이터 값

코드 예시
```java
public class DataType {

  public static void main(String[] args) {

    //리터럴 상수
    final int nConst = 3;

    //리터럴 정수
    byte bNum = 10;
    short sNum = 10;
    int nNum = 10;
    long lNum = 10L;

    //리터럴 실수
    float fNum = 3.14f;
    double dNum = 3.14;

    //리터럴 문자
    char cChar = 'A';
    System.out.println(cChar);
    System.out.println((char) 65);

    //리터럴 논리값
    boolean bFlag = true;
    System.out.println(bFlag);

    //리터럴 문자열
    String szMsg = "Hello, Java!";

    //리터럴 null
    Object obj = null;
    System.out.println(obj);
  }

}

```

참조형

  • 기본형을 제외한 모든 자료형
  • 참조형 변수는 객체를 가르키는 변수!
  • 클래스, 배열, 인터페이스, 열거형 등.

코드예시

```java
package lecture02;

public class ReferenceDataType {

  public static void main(String[] args) {
    //참조 자료형
    //참조 자료형은 객체의 주소를 저장하는 자료형이다.

    //배열
    String str = "abc";
    String str2 = new String("abc");

    System.out.println(str == str2); //false
    System.out.println(str.equals(str2)); //true

    int[] aNum = new int[3];
    System.out.println("aNum = " + aNum); //[I@15db9742
    System.out.println(aNum.getClass().getName()); //[I
    System.out.println(aNum.getClass().getSimpleName()); //int[]
    System.out.println(aNum.getClass().getSuperclass().getName()); //java.lang.Object
  }

}

```

형변환

코드예시

```java
package lecture02;

public class Casting {

  public static void main(String[] args) {
    //형 변환 (Casting)
    //implicit type conversion
    //묵시적 형 변환 or 자동 형 변환 : 작은 타입에서 큰 타입으로
    //byte -> short -> int -> long -> float -> double
    //char -> int -> long -> float -> double
    //boolean -> int -> long -> float -> double
    int numInt = 10;
    double d = numInt;
    System.out.println("j=" + d); //정수가 실수로 자동 형 변환

    //explicit type conversion
    //명시적 형 변환 or 강제 형 변환 : 큰 타입에서 작은 타입으로
    double res = Math.sqrt(2);
    System.out.println("res = " + res);
    float f = (float) res;
    System.out.println("f = " + f); //자료 손실 발생
  }

}

```

연산자

강의에선 생략

문장의 종류

  • 수식문
  • 변수 선언문
  • 제어문
    • 실행 흐름을 바꿈!
    • 선택문 : if, switch
      • if문 : if(boolean-수식) {문장}
      • if-else문 : if(boolean-수식) {문장} else {문장}
      • switch문 : 다중 선택 구조. case의 조건은 정수 or string
      • 코드
switch (n) {
case 10:
  System.out.println("10입니다.");
  break;
case 20:
case 30:
  System.out.println("20이거나 30입니다.");
break;
default:
  System.out.println("모르겠습니다.");
break;
    - default는 어떤 case에도 해당되지 않는 경우(생략가능)
- 반복문 : for, while, do-while
    - 향상된 for문(for-each문) : 배열 또는 컬렉션 원소를 차례로 다룰 때
- 점프문
    - return : 값을 반환
    - break : 가장 가까운 switch 및 반복문의 실행을 끝냄.
    - continue : 반복문 안에서 다음 반복으로 즉시 넘어감.
    - break와 continue는 레이블을 사용할 수 있음!
    - <summary>코드 예시</summary>

public class LabelEx {

  public static void main(String[] args) {
    outerLoop:
    for (int i = 1; i <= 3; i++) {
      innerLoop:
      for (int j = 1; j <= 3; j++) {
        if (i == 2 && j == 2) {
          // 특정 조건에서 레이블을 사용하여 바깥쪽 반복문을 종료
          break outerLoop;
        }
        if (i == 1 && j == 1) {
          // 특정 조건에서 레이블을 사용하여 내부 반복문의 이번 반복을 건너뜀
          continue innerLoop;
        }
        System.out.println("i = " + i + ", j = " + j);
      }
    }
  }

}
  • 블록문 : ‘ {} ’ : 중괄호로 묶은것
  • 레이블문 : 레이블 : 문장
  • 예외처리문 : try-catch
  • 동기화문 : synchronized 블록문