JAVA 기본

zee-chive·2024년 7월 15일

Java

목록 보기
1/12
  • 프로그램
    • 컴퓨터가 특정 작업을 수행하도록 지시하는 일련의 명령어들의 집합 (= 작업 지침서)
    • 컴퓨터가 이해할 수 있는 형태(기계어)로 변환되어 실행, 명령은 CPU에서 실행된다.
    • 응용 프로그램, 운영체제

  • 운영체제
    • 시스템 하드웨어를 관리할 뿐 아니라, 응용 프로그램을 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어
    • 공통 시스템 서비스 : 프로세스 관리, 메모리 관리, 파일 시스템 관리 등

  • 자료 표현
    • 비트(bit) : 0 또는 1의 값만 가질 수 있음
    • Byte : 8개의 비트로 구성된 정보 단위, 컴퓨터 메모리의 기본 단위
    • 2진수 : 두 가지 상태(0과 1)만을 사용하는 수 체계
    • 0-255 수로 보는 것, 혹은 부호 비트로 보는 것인지에 대해서 값이 달라질 수 있다.



JVM (자바 가상 머신) : 자바 바이트 코드를 실행하 수 있는 주체

  • 자바 바이트 코드를 기계어로 번역하여, 특정 플랫폼의 실제 하드웨어에서 실행
  • 컴파일 : 사람이 작성한 코드를 기계어로 변경
    ( 자바 원시 프로그램 .java ) - 컴파일 -> ( 자바 바이트 코드 .class )
  • 바이트 코드 : 소스 코드와 기계어 사이의 중간 단계 (플랫폼에 독립적)
  • JVM은 플랫폼 독립성을 가능하게 한다. (JVM의 자체는 플랫폼 종속적)



C:\Users\SSAFY>cd C:\Temp

C:\Temp>javac Hello.java

C:\Temp>java Hello
Hello World

메모장에 작성된 파일을 cmd 로 실행하는 경우, javac 라는 컴파일 명령어를 작성해야 한다.




메인 메서드 (main method) - public static void main(String[] args) {}

  • 자바 어플리케이션 시작점
  • 실행할 때 가장 먼저 호출이 된다.




printf : 포맷 지정자(%로 시작)를 사용하여 형식을 지정해 데이터 출력

  • %d : 정수
  • %f : 실수
  • %c : 문자
  • %s : 문자열
        System.out.printf("%d\n", 10); // 정수 (10진수)
        System.out.printf("%o\n", 10); // 정수 (8진수)
        System.out.printf("%x\n", 10); // 정수 (16진수) 소문자 
        System.out.printf("%X\n", 10); // 정수 (16진수) 대문자 
        
        System.out.printf("%d\n", 10); // 4칸을 확보한 뒤 오른쪽부터 차지 
        System.out.printf("%-4d\n", 10); // 4칸을 확보한 뒤 왼쪽부터 차지 
        System.out.printf("%04d\n", 10); 
        // 4칸을 확보한 뒤 오른쪽부터 차지 (빈칸은 0으로 채움)
        
        System.out.printf("%f\n", 10.12345); // 실수
        System.out.printf("%.2f\n", 10.12345); // 실수 (소수점 둘째자리까지)
        
        System.out.printf("%s\n", "싸피"); // 문자열
        System.out.printf("%c\n", 'A'); // 문자 
        System.out.printf("%d\n", (int)'A'); // 문자를 정수로 출력




  • 기본 자료형


  • 참조 자료형 : 변수에 참조(레퍼런스, 주소 저장)




  • 묵시적 형변환 : 범위가 넓은 데이터 형에 좁은 데이터 형을 대입
  • 명시적 형변환
    • 범위가 좋은 데이터 형에 넓은 데이터 형을 대입
    • 형 변환 연산자 사용 - (타입) 값;
      int i = 100 ; 
      //byte b = i; 
      byte b = (byte)i; 

명시적 형변환이 필요한 곳에서 작성하지 않으면 에러 발생한다.



  • 리터럴
    - 값을 소스 코드 상에 적어 놓는 것.
    • 데이터 형에 따라서 값의 표기 방법이 바르다.
    • ex) 100 : int 형의 숫자 100 / 100L : long 형의 숫자.
    • ex) 12.321 : double 형 / 12.321f : float 형의 문자.
    • "Hello, World" : String 형의 문자열
long l1 = 100; // int 의 값이 묵시적형변환이 된 것이다. 
int l2 = 123415678901234;
		//The literal 123415678901234 of type int is out of range 




비교 연산자 - ==
: 비교 연산자의 경우 참조 자료형은 주소 값까지 동일해야 한다.
(기본 자료형은 문제가 되지 않는다.)

System.out.println(c == d); // t
System.out.println(c == e); // f
System.out.println(c.equals(e)); // t

문자열은 .equals() 를 사용해야 한다.





short circuit : 효율적 연산

  • && 혹은 || 을 사용할 때, 하나의 값에 따라서 뒤의 값을 확인하지 않는 경우도 있다.
  • 예 : true || B 의 경우, 앞이 true 이므로 뒤는 실행하지 않고 true.
  • 예 : false && B 의 경우, 앞이 false 이므로 뒤는 실행하지 않고 false.
        System.out.print(a > b && a++ > b); // short circuit 발생(하나만 확인)
        System.out.println(" " + a);
        System.out.print(a < b && a++ < b); // 둘다 확인 
        System.out.println(" " + a);
        
        System.out.print(a > b || a++ > b); // 둘다 확인 
        System.out.println(" " + a);
        System.out.print(a < b || a++ < b); // short circuit 발생 
        System.out.println(" " + a);

false 10
true 11
false 12
true 12





  • do { } while ( 조건문 ) 의 경우 최소 한 번은 실행하게 된다.
  • break; : 가까운 반복문을 빠져나감.
  • continue; : 반복의 남아있는 부분을 건너뛰고 다음 반복으로 간다.
out: for (int i = 2; i <= 9; i++) {
	System.out.println(i + "단");
	for (int j = 1; j <= 9; j++) {
		if (j > 5)
			break out;
		System.out.printf("%d * %d = %d\n", i, j, i * j);
	}
}
  • break 와 continue 의 경우 중첩문을 라벨링 하여서 해당 부분 종료되게 할 수 있다.




  • Scanner : 속도가 느리지만, 형변환을 알아서 해준다.
Scanner sc = new Scanner(System.in); 
int a = sc.nextInt();
String b = sc.next();
  • BufferedReader : 속도가 더 빠르지만, 직접 형변환을 해줘야 한다.
    - 토큰 단위로 끊어주거나 형변환 기능이 없다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
// 토큰 단위로 끊기 
StringTokenizer st = new StringTokenizer(str);
// 문자열을 정수로 형변환 
int a = Integer.parseInt(st.nextToken());
profile
누가 봐도 읽기 쉬운 글이 최고의 글이다.

0개의 댓글