자바_02 자바 기초, 변수와 타입, 연산자, 조건문, 반복문

aggapang·2025년 4월 26일

kb IT's Your Life

목록 보기
10/21

자바 특징

기준Java
기본 개념컴파일 언어, 주로 서버 및 엔터프라이즈 애플리케이션에 사용
실행 환경JVM (Java Virtual Machine)
언어 유형정적 타이핑(static typing)
사용 사례웹 백엔드, 안드로이드 앱 개발, 엔터프라이즈 애플리케이션, 데스크톱 애플리케이션
구문 및 문법엄격한 문법, 객체지향 프로그래밍 지원
변수 선언int, double, boolean, String, class 타입 객체
객체 지향클래스 기반
멀티스레딩멀티스레딩 지원 (다중 스레드)
패키지 관리Maven Central, Gradle Repository
빌드 도구Maven, Gradle, Ant
  • 객체 지향 프로그래밍 언어 (OOP)
    • 현실 세계를 객체로 모델링하여 코드로 표현
  • 정적 타이핑 언어 (Static Typing)
    • 변수 선언 시 타입을 명확히 지정해야 하며, 이후 다른 타입으로 바꿀 수 없음
  • 한 파일에는 무조건 하나의 클래스가 들어가야 함
    • 클래스명이 파일명과 같아야 함 (Hello.java 안에는 public class Hello)
  • ; 마지막에 꼭 붙이기!

저장방식

  • 데이터를 RAM에 넣어두었다가 CPU가 꺼내어 프로그램을 실행

변수

  • variable
  • 정적 타입핑 : 선언된 타입과 일치하는 값만 저장 가능

변수 선언

  • 타입 변수명 = 변수값;
  • 모든 변수는 클래스 안에만 존재할 수 있음 (전역 변수 없음)
  • 변수를 선언할 때는 반드시 초기값을 넣기 아니면 쓰레기값이 들어있다고 표현함

변수 초기화

  • 변수에 최초로 값이 대입될때, 메모리에 할당하고 값 저장
  • 초기화 되지 않은 변수를 사용하면 컴파일 에러

네이밍 규칙

  • 카멜 표기법: userName, totalScore
  • 상수는 스네이크 표기법: MAX_VALUE

변수의 자료형 (타입)

기본 타입 (Primitive Type)

  • 변수에 하나 값만 저장
  1. 정수

    타입크기설명
    byte1 byte작은 범위의 정수(-128 ~ 127)
    short2 byte정수
    int (기본 타입)4 byte정수
    long8 byte정수
    • 2진수로 저장
    • 음수는 2의 보수로 표현
    • 정수 리터럴
      • 16진수 : 0x
      • 2진수 : 0b
      • 8진수 : 0
    • 범위를 초과할 경우, 컴파일 에러( error: incompatible types: possible lossy conversion from int to byte byte i=129;)
    • long 타입일 경우 숫자 마지막에 L 붙여주기
      long var = 1000000000000L
  2. 문자 리터럴과 char 타입

    타입크기설명
    char2 byte문자 하나 ('A', '1')

    char one = 'A';

    • 문자 리터럴 : 하나의 문자를 작은 따옴표로 감싼 것
    • 유티코드로 저장함
    • 정수 타입에 속함
  3. 실수 타입

    타입크기설명
    float4 byte실수 (7자리까지 정확도 1.4 × 10-45 ~ 3.4 × 1038)
    double (기본 타입)8 byte실수 (더 높은 정확도)
    • 실수 리터럴의 기본 타입은 double
    • float는 마지막에 f,F 붙여줘야함
      float var = 3.14
  4. 논리 타입

    타입크기설명
    boolean1 bittrue / false
    • 조건문과 제어문의 실행 흐름을 변경하는데 사용

참조 타입 (Reference Type)

  • String, 배열, 사용자 정의 클래스 등

  • 실제 데이터는 heap 영역에 저장되고, 변수는 그 주소를 참조

    String name = "Java";

형 변환 (Type Casting)

  • 자동 형 변환: 작은 타입 → 큰 타입

  • 강제 형 변환 (casting): 큰 타입 → 작은 타입 (데이터 손실 가능)

    • 캐스팅 연산자 괄호() 사용
    • int -> byte : 원래 값이 보존 X
    int num = 256;
    byte small = (byte) num; // 강제 형 변환
    
  • 연산식 자동 형변환

    • byte, short 타입 변수는 int 타입으로 자동 변환
    • 하나라도 long 타입이면 long 타입으로 출력
    • 하나라도 double 타입이면 모두 double로 자동 변환
      • ex) int타입 + double타입 -> double 타입
    • 문자열 + 정수 -> 문자열
  • String 타입으로 변환하기

    변환 타입사용 예
    String → byteString str = "10";
    byte value = Byte.parseByte(str);
    String → shortString str = "200";
    short value = Short.parseShort(str);
    String → intString str = "300000";
    int value = Integer.parseInt(str);
    String → longString str = "4000000000";
    long value = Long.parseLong(str);
    String → floatString str = "12.345";
    float value = Float.parseFloat(str);
    String → doubleString str = "12.345";
    double value = Double.parseDouble(str);
    String → booleanString str = "true";
    boolean value = Boolean.parseBoolean(str);

변수 사용 범위

  • 지역 변수 : 블록{} 내에서 선언된 변수는 해당 블록에서만 사용 가능

입출력

콘솔로 출력

System.out.println() 이용

  • println : 줄봐꿈

  • print : 줄봐꿈 X

  • printf("형식문자열",값1,..) : 형식 문자열에 맞추어 출력

    int i= 5;
    String S = "hello";
    char c = 'A';
    System.out.printf("i=%d, S=%s, c=%c\n", i, S, c);

입력 데이터 변수에 저장

Scanner sc = new Scanner(System.in);
String inputData = sc.nextLine();

연산자

산술 연산자

+, -, *, /, %

  • byte, short끼리 연산해도 결과는 int
  • 정수 / 정수 = 정수! (실수를 얻고 싶다면 하나는 double or float이어야 함)
  • Double.isInfinite(), Double.isNaN() 사용해 연산시 에러 방지
int a = 5, b = 2;
System.out.println(a / b);     // 2
System.out.println(5 / 2.0);   // 2.5

논리 연산자

&&, ||, !

  • 여러 조건 비교할 때 사용
int age = 20;
boolean isAdult = (age > 18) && (age < 65);

증감 연산자

++, --

int x = 1;
System.out.println("x++ 결과: " + x++); // 출력: 1, x는 2가 됨
System.out.println(x); // 2
  • 후위 연산자는 먼저 출력/사용 → 그 다음 증가
  • z = x++
    • z = x
    • x = x + 1
  • z = ++x
    • x = x + 1
    • z = x

⚠️ 결합 연산자 (+와 문자열)

  • 피연산자 중 하나라도 문자열이면 결과는 문자열
System.out.println("나이: " + 20); // "나이: 20"

연산 수행 순서

오버플로우 언더플로우


참조 타입의 특징 (String 등)

  • heap 영역에 실제 값 저장, 변수는 주소를 참조
  • 문자열은 불변 (immutable): 값이 바뀌면 새로운 문자열이 만들어짐
String a = "hello";
String b = a;
a = "hi";

System.out.println(b); // hello (a가 바뀌어도 b는 그대로)

조건문

if문

if(조건식1){
	//실행식1
} else if(조건식2){
	//실행식2
} else{
	//실행식3
}

switch문

switch(변수명){
	case 1:
    	//실행식1
        break;
    case 'A':
    	//실행식2
        break;
    default:
  		//실행식3
}

// switch expression문
타입 변수 = switch(변수명){
	case "값1" -> 변수값;
    case "값2" -> {
    	yield 변수값;
    }
    defalt -> 변수값;
}
  • switch expression문
    • 대입문으로 사용
    • 중괄호{} 사용하는 경우 yield로 변수값 지정
    • defalt 반드시 존재해야함!

반복문

for문

// fori
for(초기화식; 조건식; 증감식){
}

// new for
for(타입 변수명 : 참조형_변수명){
	//변수명사용하면 참조형 변수를 하나씩 꺼내줌
}

while문

while(조건식){
	//실행문
}

do-while문

do{
	//실행문
}while(조건식)

break;

  • 반복문 실행 중지 or switch문 실행 종료
  • 현재 루프만 종료
  • if문에서 사용할 경우 실행 종료가 아닌 반복문 실행 중지
  • 라벨을 이용해서 바깥 루프 종료 가능
     Outter: for(;;) {
                for(;;) {
                    //실행문
                    if(조건식) {
                        break Outter;
                    }
                }
     }

continue;

  • 반복문에서만 사용
  • 해당 블록의 continue 이후의 코드를 실행하지 않고 다음 반복으로 넘어감

주석

  • 한줄 : //
  • 범위 주석 : /* */

0개의 댓글