Algorithm Study/Java

[자바의 정석] 기초편

728x90
반응형

 

 강의를 들으면서 기억해야 할 내용을 개인적으로 적어보았다

 


자바의 특징

  • 배우기 쉬운 객체지향 언어
  • 자동 메모리 관리
  • 멀티 쓰레드를 지원
  • 풍부한 라이브러리
  • 운영체제에 독립적

 

자바 가상 머신(JVM)

자바 프로그램이 실행되는 가상 컴퓨터

한번 작성하면 어디서든 실행 (윈도우, OSX, Linux)

 

자바 API

  • Java로 프로그램을 만드는데 필요한 주요 기능을 미리 만들어서 제공
  • www.oracle.com에서 압축파일을 다운받아 사용

 

단축키 목록

  • ctrl + shift + L : 단축키 전ㅊ체 목록 보기
  • ctrl + +/- : 폰트 크기 증가/감소
  • ctrl + d : 한줄 삭제
  • ctrl + alt + ↓ : 행단위 복사
  • ctrl + i : 자동 들여쓰기
  • ctrl + space : 자동완성
  • alt + shift + a : 멀티컬럼 편집
  • alt + ↑/↓ : 행단위 이동

 

변수

  • 하나의 값을 저장할 수 있는 메모리 공간
  • 변수의 선언 : 값을 저장할 공간을 마련
  • 방법 : '변수타입 변수이름 ;'

 

변수의 타입

  • 변수 : 하나의 값을 저장하기 위한 공간
  • 상수 : 한 번만 값을 저장 가능한 변수
  • 리터럴 : 그 자체로 값을 의미 (원래의 상수 개념)
  •  
  • final int Max = 100; // MAX는 상수 int Max = 200; // 에러

 

리터럴의 접두사와 접미사

int i = 100;  // 10진수
int oct = 0100; // 8진수
int hex = 0x100; //16진수
float f = 3.14f;
double d = 3.14d;
10. → 10.0
.10 → 0.10
10f → 10.0f
1e3 → 1000.0  // e : 10의 n제곱

 

변수와 리터럴의 타입 불일치

  1. 범위가 '변수 > 리터럴' 인 경우 OK
    • int i = 'A'; // int > char
    • long l = 123; // long > int
    • double d = 3.14f; // double > float
  2. 범위가 '변수 < 리터럴' 인 경우 에러
    • int i = 30_0000_0000; // int의 범위 벗어남
    • long l = 3.14f; // long < float
    • float f = 3.14d; // float < double
  3. byte, short 변수에 int 리터럴 저장 가능
    • 단, 변수의 타입 범위 이내여야 한다
    • byte b = 100; // OK, byte 범위(-128~127)에 속함
    • bye b = 128; // 에러, byte 범위를 벗어남

 

문자, 문자열 리터럴, 문자열 결합

  • char는 하나의 문자에 대해서만 사용
  • string을 다수의 문자에 대해서 사용
  • system.out.println(""+7+7)  // 77
    system.out.println(7+7+"")  // 14

 

두 변수 바꾸기

  • 두 변수를 바꾸기 위해서는 여분의 변수 공간이 더 필요하다

 

printf를 이용한 출력

System.out.printf("%.2f", 10.0/3);  // 3.33
System.out.printf("%d", 0x1A);  // 26
System.out.printf("%x", 0x1A);  // 1A
지시자 설명
%b boolean 형식으로 출력
%d 10진(demical) 형식으로 출력
%o 8진(octal) 형식으로 출력
%x, %X 16진(hexa-demical) 형식으로 출력
%f 부동 소수점(floating-point) 형식으로 출력
%e, %E 지수(exponent) 표현식의 형식으로 출력
%c 문자(character)로 출력
%s 문자열(string)로 출력

 

System.out.printf("age:%d", age); // 줄바꿈 x
System.out.printf("age:%d%n", age); // %n : 출력 후 줄바꿈을 한다

 

printf()의 지시자

  • 정수를 10진수, 8진수, 16진수로 출력
    • System.out.printf("%d", 15);  // 15 10진수
      System.out.printf("%o", 15);  // 17 8진수
      System.out.printf("%x", 15);  // f 16진수
      System.out.printf("%s", Integer.toBinaryString(15));  // 1111 2진수
  • 8진수와 16진수에 접두사 붇이기
    • System.out.printf("%#o", 15);  // 017
      System.out.printf("%#x", 15);  // 0xf
      System.out.printf("%#X", 15);  // 0XF
  • 실수 출력을 위한 지시자 %f - 지수형식(%e), 간략한 형식(%g)
    • float f = 123.4567890f;
      System.out.printf("%f", f);  // 123.456787 소수점 아래 6자리
      System.out.printf("%e", f);  // 1.2345678e+02 지수형식
      System.out.printf("%g", 123.46789);  // 123.457 간략한 형식
      System.out.printf("%g", 0.0000001);  // 1.00000e-8 간략한 형식

 

화면으로부터 입력받기

  • Scanner : 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
  • Scanner를 사용하기 위해 import문을 추가해야 하고, Scanner 객체를 생성하고 사용해야 한다
    • int num = scanner.nextInt();  // 화면에서 입력받은 정수를 num에 저장
      String input = scanner.nextLine();  // 화면에서 입력받은 내용을 input에 저장
      int num = Integer.parseInt(input);  // 문자열(input)을 숫자(num)로 변환

 

정수형의 오버플로우

  • 표현가능한 범위를 넘어가는 것

 

타입간의 변환방법

  • 문자와 숫자간 변환 : "3"(문자) ↔ 3(숫자)
  • 문자열로의 변환 : 3 + "" or '3' + "" → "3", 빈 문자열을 더해주면 된다
  • 문자열을 숫자로 변환 : "3" → 3, Integer.parseInt("3")
  • 숫자, 문자, 문자열 구분해서 전환하는 방법 익히기

 

형변환 연산자, 자동 형변환

변환 수식 결과
int → char (char)65 'A'
char → int (int)'A' 65
float → int (int)1.6f 1
int → float (float)10 10.0f
  • 자동형변환 : 컴파일러가 자동으로 형 변환을 적용
    • float f = 1234:  // int 타입 값을 float 타입 변수에 저장

 

반올림

  • Math.round() : 실수를 소수점 첫 째 자리에서 반올림한 정수를 반환
  • double pi = 3.141592;
    
    System.out.println(Math.round(pi*1000)/1000);  // 3
    System.out.println((double)Math.round(pi*1000)/1000);  // 3.142

 

비교 연산자

  • 문자열을 비교할 때는 == 대신 equals()를 사용해야 한다 : 올바른 값이 도출되지 않을 수도 있다
  • String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1==str2);  // true
    System.out.println(str1.equals(str2));  // true
    
    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1==str2);  // false
    System.out.println(str1.equels(str2));  // true

 

논리 연산자

  • x는 10보다 크고 20보다 작다
    • x > 10 && x < 20 (10<x<20 처럼 사용하면 안됨!)

 

논리 부정연산자

  • ! : not의 의미를 갖는다
  • 문자 ch가 소문자가 아니다
    • ch < 'a' || ch > 'z' 보다 !('a' <= ch && ch <= 'z') 처럼 적는 것이 직관적이다

 

조건 연산자 ? :

  • result = (x > y) ? x : y ;  // 괄호 생략 가능 
    조건식이 True 일때와 False일 때 반환값을 달리한다

 

조건문과 반복문

  • 조건문 : 조건을 만족할 때만 {}를 수행
  • 반복문 : 조건을 만족하는 동안 {}를 수행
  • 조건문과 반복문을 제어문(flow control statement)라고 함
if < (score>60) {
    System.out.println("텍스트")''
}

int i = 10;
while (i-- > 0) {
    System.out.println(i);
}

 

switch문

  • 처리해야 하는 경우의 수가 많을 때 유용한 조건문
  • if문은 조건식에 True/False만 가능하지만 switch문은 조건을 다양하게 활용할 수 있음
switch (조건식) {
    case 값1 :
        ..
        break;
    case 값2 :
        ..
        break;
}
  • 다음과 같이 사용도 가능
switch(month) { 
	case 3: case 4: case 5: 
    	System.out.println("현재의 계절은 봄입니다.") 
    case 6: case 7: case 8: 
    	System.out.println("현재의 계절은 여름입니다.") 
    .. 
    }

 

임의의 정수 만들기

  • Math.random() : 0.0 ~ 1.0 사이 임의의 double 값을 반환
  • Math.random()을 활용해 원하는 범위 안에 난수를 생성할 수 있다

 

for 문

  • for문 사용에 대해 정형화된 구조 이해하기
int i;  // scope(범위) - 선언 위치부터 선언된 블럭의 끝까지

for (i = 1; i <= 10; i++){
    System.out.println(i);
}
  • 다음과 같이도 활용할 수 있다
for (int i = 1, j = 10; i <= 10; i++, j--){
    System.out.println(i+", "+j);
}

 

- 추가 공부하고 업데이트 하기 -