본문 바로가기
Java

4/2 변수와 타입, 연산자

by Jiwon_Loopy 2025. 4. 5.
반응형

컴파일 언어 VS 인터프리터 언어


  • 컴파일 언어
    • 소스 → 컴파일 (컴파일러) → 기계어
    • C, C++, …
    • 비교적 옛날 언어
    • 빠르다.
    • 실행 파일이 OS마다 달라짐 (리눅스, 윈도우 따로 실행)
    • Java는 컴파일 언어가 아니다.
  • 인터프리터 언어
    • 소스 → 실행
    • 컴파일 과정 생략
    • 비교적 최신 언어
    • 느리다.
    • 플랫폼 종속성이 낮다. (OS 영향 없음)
    • JavaScript, Python, …
  • JIT (Just In Time)
    • 컴파일 언어의 장점 + 인터프리터 언어의 장점
    • 소스 → 바이너리 파일 → JVM 실행
    • 양쪽의 단점도 다 가지고 있다.
    • 컴파일 언어보다는 느리고, 인터프리터 언어보다는 빠르다.
  • JDK
    • 자바 개발 도구
  • JRE
    • 자바 실행 환경

프로그램


  • 순서에 의해 나열

주석


  • 주석은 바이너리 컴파일 제외
  • // (행 주석)
    • 한 줄 주석
    		//System.out.println("Hello World");
    
  • / / (범위 주석)
    • 여러 줄 주석
    		/*
    		System.out.println(Arrays.toString(b));
    		System.out.println(Arrays.toString(a));
    		*/
    
  • / / (도큐먼트 주석)*
    • API 도큐먼트 생성 시 사용
    • 함수 위에서 /** 입력 후 엔터를 누르면 자동으로 @Param, @Return 과 같은 주석이 추가됨
    /**
    	 * 
    	 * @param a
    	 * @param b
    	 * @return
    	 */
    	public static int add(int a, int b) {
    		int sum = 0;
    		return sum;
    	}
    

변수


  • 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
  • 값이 변하는 경우
  • 반대 개념은 상수
  • 여러 군데 사용한다면 굳이 변하지 않아도 사용하면 좋음
  • 엄격한 타입 체크 (정수형 타입은 정수만)
  • 클래스명은 대문자, 변수명은 소문자로 선언
package ch01;

public class Variable {
	public static void main(String[] args) {
		
		// 변수 선언
		// 타입 변수명;
		int a;
		
		// 대입
		a = 10;
		
		System.out.println(a);
		
		// 변수 선언 + 초기화
		int b = 10;
		
		// 초기화하지 않으면 사용 불가
		int c; // 에러
		
		// 다른타입 대입 불가
		int d = 3.14; // 에러
		
		// 동일한 타입
		// 정수가 실수로 자동 변환
		double e = 3.14; // 3.0
		
		double f = 3;
		
	}
}

  • 변수 명
    • camelCase
      • 소문자로 시작하되, 두 번째 단어부터 첫 자는 대문자로 구분
    • snake_case
      • 언더바( _ )를 이용하여 단어 사이를 구분
    • PascalCase
      • 대문자로 시작하되, 단어의 첫 자는 대문자로 구분

타입 (자료형)


  • 기본 자료형
    • 정수
      • byte
      • short
      • char
      • int
      • long
        • 뒤에 l 붙여야 함
      package ch01;
      
      public class Variable {
      	public static void main(String[] args) {
      		
      	Variable f;
      	
      	// byte 타입의 범위 -128 ~ 127
      	byte g = -128;
      	
      	// 가장 자주 사용
      	int h = -33000;
      	
      	// 연산자 int로 변환
      	byte i = g + 1; // -127이 될 수 없음 (우항이 int 취급)
      	
      	// 21억이 넘을 경우 long
      	// long = int (형 변환)
      	long j = 10; // 자동 형 변환
      	
      	long k = 10l; // 숫자 뒤에 l을 기재해야 long 타입으로 취급
      		
      	}
      }
      
    • 실수
      • double
      • float
        • 뒤에 f 붙여야 함
    • 문자
      • char
      package ch01;
      
      public class Variable {
      	public static void main(String[] args) {
      		
      	// 문자
      	char m = "A"; // 에러
      	
      	char n = 'A'; // 홑 따옴표, 65
      	
      	int o = n + 1; // 66, char는 내부적으로 정수로 되어 있어 int 연산이 가능
      	
      	// 문자열
      	String s = "A"; // 쌍 따옴표
      	
      	}
      }
      
    • 논리
      • boolean
      package ch01;
      
      public class Variable {
      	public static void main(String[] args) {
      	
      	// 논리 타입
      	// true, false
      	boolean p = true;
      	
      	int x = 10;
      	boolean result = x == 20; // 10 != 20 -> false
      	
      	}
      }
      
  • 참조 자료형
    • 배열
      • [ ]
    • 리스트
      • List
    • 클래스
      • class
      • String
    • 인터페이스
      • interface

Type mismatch


  • 지정된 타입의 범위를 벗어나거나, 올바르지 않은 타입을 대입할 경우 발생되는 에러

이스케이프 문자


  • 탈출 시켜서 문자열에 영향을 주지 않는 문자
  • \”
    • 큰 따옴표 포함
  • \’
    • 작음 따옴표 포함
  • \\
    • \ 문자 포함
  • \t
    • tab(4칸)만큼 띄움
  • \n
    • 줄 바꿈
package ch01;

public class Variable {
	public static void main(String[] args) {
		
		//escape
		String greet = "저는 \\"홍길동\\" \\\\입니다"; // 저는 "홍길동" \\입니다
		
}

형 변환


  • 자동 형 변환
    • 작은 범위의 값이 넓은 범위의 변수로 대입
  • 강제 형 변환
    • 넓은 범위의 값이 작은 범위의 변수로 대입
package ch01;

public class Variable {
	public static void main(String[] args) {
		
	// 형 변환 : 타입 변환
	// 자동형변환 (묵시적, 암시적): 작은 범위의 값이 넓은 범위의 변수로 대입
	int a = 0;
	double q = a; // int -> double 
	
	
	// 강제형변환 (명시적): 넓은 범위의 값이 작은 범위의 변수로 대입
	a = (int)q; // 바꾸고자하는 타입을 지정
	
	}
}

  • 문자열을 기본 타입으로 변환
    • 자료형이름.parse자료형이름(문자열);
    int n = Integer.parseInt(”10”) // 10
    
  • 기본 타입을 문자열로 변환
    • String.valueOf(기본타입값);
    String str = String.valueOf(10) // "10"
    
    • 꼼수
    String s = 10 + ""; // "10", 문자열의 덧셈은 문자열이므로
    
package ch02;

public class PrimitiveAndStringConversionExample {

	public static void main(String[] args) {
		
		int value1 = Integer.parseInt("10");
		double value2 = Double.parseDouble("3.14");
		boolean value3 = Boolean.parseBoolean("true");
		
		System.out.println("value1 : " + value1);
		System.out.println("value2 : " + value2);
		System.out.println("value3 : " + value3);
		System.out.println();
		
		String str1 = String.valueOf(10);
		String str2 = String.valueOf(3.14);
		String str3 = String.valueOf(true);
		
		System.out.println("str1 : " + str1);
		System.out.println("str2 : " + str2);
		System.out.println("str3 : " + str3);
	}

}

출력 결과

value1 : 10 // int
value2 : 3.14 // double
value3 : true // boolean

str1 : 10 // String
str2 : 3.14 // String
str3 : true //String

연산


  • 문자열 덧셈
    • 문자열을 더하면 두 문자열을 연결 시킨 값을 리턴한다.

출력


  • println
    • 한 줄 점프
  • print
    • 이어서 쓰기
  • 문자열 포맷
    • %s
      • 만능
      • 문자열
    • %d
      • 정수
    • %f
      • 실수
  • BufferedWriter

입력


  • Scanner
    • 비교적 느림
package ch02;

import java.util.Scanner;

public class PrimitiveAndStringConversionExample {

	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("x 값 입력: ");
		String strX = scanner.nextLine();
		int x = Integer.parseInt(strX);
		
		
		System.out.print("y 값 입력: ");
		String strY = scanner.nextLine();
		int y = Integer.parseInt(strY);
		
		int result = x + y;
		System.out.println("x + y: " + result);
		System.out.println();
		
		while(true) {
			System.out.print("입력 문자열: ");
			String data = scanner.nextLine();
			if(data.equals("q")) {
				break;
			}
			System.out.println("출력 문자열 " + data);
			System.out.println();
		}
		
		System.out.println("종료");
		
	}

}

출력 결과

x 값 입력: 5
y 값 입력: 5
x + y: 10

입력 문자열: 5
출력 문자열 5

입력 문자열: 5
출력 문자열 5

입력 문자열: 5
출력 문자열 5

입력 문자열: 10
출력 문자열 10

입력 문자열: 6
출력 문자열 6

입력 문자열: q
종료
  • BufferedReader
    • 비교적 빠름

문자열 비교


  • 문자열 비교는 equals 사용
  • 항상 return값은 true 또는 false
package ch02;

public class PrimitiveAndStringConversionExample {

	public static void main(String[] args) {
	
	String name1 = "홍길동";
	String name2 = "홍길동";
	String name3 = new String("홍길동");
	
	System.out.println(name1 == name2); // true
	
	System.out.println(name2 == name3); // false
	
	System.out.println(name2.equals(name3)); // true
		
	}
}
  • null은 값 자체가 없으므로, 비교 불가
package ch02;

public class PrimitiveAndStringConversionExample {

	public static void main(String[] args) {
	
	String name1 = null;
	String name2 = "String";

	System.out.println(name1.equals(name1)); // error, NullPointException
	System.out.println(name2.equals(null)); // true
		
	}
}

메모


  • 실행은 bin이 없으면 불가능하다.
  • 실행될 때 나는 에러는 런타임 에러
  • 실행 전에 나는 에러는 컴파일 에러
  • 컨벤션
    • 개발자들끼리의 약속 (변수 명, 포맷 …)
    캠퍼스 핵데이 Java 코딩 컨벤션
  • 자바 13 이상부터 여러 줄 큰 따옴표를 쓸 수 있다.
  • package ch01; public class Variable { public static void main(String[] args) { String greet2 = """ 저는 홍길동 입니다 """; } } 출력 결과 저는 홍길동 입니다
  • JDK 11 이상에서 타입 추론이 추가되었다.
  • package ch01; public class Variable { public static void main(String[] args) { // 타입 추론 var age = 30; // 정수 var age2 = "30"; // 문자열 } }
  • 변수의 범위는 선언된 위치의 중괄호 안에서만 (Scope)
 

캠퍼스 핵데이 Java 코딩 컨벤션

중괄호({,}) 는 클래스, 메서드, 제어문의 블럭을 구분한다. 5.1. K&R 스타일로 중괄호 선언 클래스 선언, 메서드 선언, 조건/반복문 등의 코드 블럭을 감싸는 중괄호에 적용되는 규칙이다. 중괄호

naver.github.io

 

728x90
반응형