JAVA_DAY1

이정찬·2023년 1월 19일
0

JAVA

목록 보기
1/5

Eclipse

패키지 만들 때 java.com으로 만들면, java 폴더 안에 com 폴더를 생성해준다.
클래스 내부의 클래스는 자동으로 이름에 $가 붙는다. 따라서 클래스 이름에 $는 되도록 쓰지 말자. 그리고 PascalCase가 기본이다.

  • abstract class: 추상 메서드 포함 클래스
  • final class: 상속X
  • static class: 클래스 이름만 알면 접근 가능(변수 래퍼런스 등)

JAVA 기본

자바의 환경변수 이름은 JAVA_HOME 고정
클래스와 관련된 상속은 단일, 인터페이스와 관련된 상속은 다중 상속이 가능하다.
실행 단계에서는 클래스 파일을 인터프리터가 구동하는 것이다.

// 한줄 주석
/* 부분 주석(단어 중간 주석), 여러 줄 주석 */
/** 
 * 문서화 주석, 보통 함수 위나 클래스 위에 온다. 
 * */

public class Test01Hello {
	public static void main(String[] args) {
		System.out.println("Hello, World!"); // sysout 치고 Ctrl + space 하면 자동완성도 됨	
        System.out.printf("%d %c %s", 456, 'B', "Hello"); // 456 B Hello
        System.out.printf("%f", 3.141592); // 3.141592
        System.out.printf("%.2f", 3.141592); // 3.14
        // %d: 정수, %c: char, %s: string, %f: 실수
        System.out.printf("%5d", 123); // '     123'
	} // end main
} // end class

블럭 끝날 때 주석으로 표시해주면 가독성에 좋다.

변수에 할당할 수 있는 대상은 모두 넓은 범위에서 literal로 분류한다.
println()은 매개변수가 없어도 돌아가면서 빈 줄을 하나 출력하지만, print()는 매개변수 없으면 에러난다.

Garbage Collector(GC)

C계열 언어와 가장 큰 차이점. 메모리 해지에 대한 코드를 신경쓰지 않아도, OS에서 할당받은 메모리 중 필요 없어진 부분을 알아서 반환해준다.

Data type

  1. 기본 타입(Primitive type, 원시 타입)
    정수, 실수, 참/거짓, 문자형(char) 등 (괄호 안의 이름은 객체화 할때 쓰는 이름이다.)
    1) 정수: byte(Byte), short(Short), char(Character), int(Integer), long(Long)
    2) 실수: float(Float), double(Double)
    3) 참/거짓: boolean(Boolean)

1바이트: byte (-128 ~ 127)
2바이트: short, char (-32768 ~ 32767, ' ' ~ ' ')
4바이트: int (약 -21억 ~ 21억), float
8바이트: long (약 -900경 ~ 900경), double

public static void main(String[] args) {
	byte b1 = 127;
    System.out.println(b1.xxx); // b1에 점을 찍어도 아무 메서드가 없다.
    System.out.println(Byte.MIN_VALUE); // Byte 객체는 내부 메서드를 사용할 수 있다.
    
    byte b1 = (byte)128; // 강제 캐스팅이 가능하지만. byte는 -128~127 범위라 찍어보면 -128 나온다.
    b1 = (byte)(127 + 1); 이것도 -128
    
    int a = 2147483648L; // long으로 타입 변환됨
    char c = 66;
    System.out.println(c); // B
	System.out.println((int) c); // 66
    
    float f1 = 3.14f; // 자바는 실수 기본형이 double이기 때문에, f를 붙여서 명시를 해준다.
    // long도 float에 할당이 가능하다.
    // double이 8바이트이기 떄문에, float를 double에 당연히 할당할 수 있다.
    
    boolean bool = false; // 0
    bool = true; // 1
    System.out.println(Boolean.TRUE + " or " + Boolean.FALSE); // "1 or 0"
    // 래퍼런스 타입은 읽기 전용(final) 이므로 수정 불가능
}
  • 자바는 초기화되지 않은 값을 출력하려면 에러가 난다. 초기화를 꼭 해주자
  • Eclipse IDE는 static 변수에 접근하면, 글씨가 살짝 기울여져서 출력된다.
System.out.println(100 + 'A'); // 165
System.out.println(100 + "A"); // 100A
System.out.println(100 + Integer.parseInt("100")); // 200
System.out.println(100 + Integer.parseInt("A")); // error

숫자 + 문자 = 숫자, 하지만 string을 넣으면 결합된 값으로 인식한다.

  1. Wrapper 타입(객체)
    Byte, Short 등 위에 쓴 것들, String
int a = 100;
System.out.println(a.MIN_VALUE); // error

Integer b = 100;
System.out.println(b.MIN_VALUE); // -2147483648
System.out.println(b.doubleValue()); // 100.0
System.out.println(b.getClass().getName()); // java.lang.Integer

String str = new String(new char[] {'a', 'n', 't'}); // String은 이런 식이다.
int[] sus = new int[] {};

System.out.println(str.length()); // 함수 타입
System.out.println(sus.length); // 참조 타입

// 미리 static final MIN_VALUE = 99 전역변수로 만들어놨다고 가정
Test01Var t01 = new Test01Var();
System.out.println(t01.MIN_VALUE); // 99
System.out.println(Test01Var.MIN_VALUE); // 99 

operator

  • 산술 연산: +, -, *
int su1 = 10;
int su2 = 3;

System.out.println(su1 / su2); // 3 (몫만 나온다)
System.out.println(su1 / 3.0); // 3.33333333333335
System.out.println(su1 % su2); // 1

long su_long = 9000000000000000000L; // 약 900경을 넘어서는 값은 처리할 수 없다. 
  • BigInteger(string | byte[]) : 큰 수 처리 가능
  • BigDecimal
import java.math.BigInteger;
import java.math.BigDecimal;
...

public static void main(String[] args) {
	BigInteger b_long = new BigInteger("9000000000000000000");
    System.out.println(b_long.add(new BigInteger("9000000000000000000")); // 18000000000000000000;
    // subtract(), multiply(), divide(), remainder()도 가능하다. 반드시 매개변수로 new BigInteger 와야 함에 주의

  double d1 = 2.0;
  double d2 = 1.1;
  System.out.println(d1 - d2); // 0.8999999999999999999999

  BigDecimal d_su1 = new BigDecimal("2.0");
  BigDecimal d_su2 = new BigDecimal("1.1");
  System.out.println(d_su1.subtract(d_su2)); // 0.9
}
  • 비트 연산: &, |, ^, <<, >>>
System.out.println(10 & 6); // 2
System.out.println(10 ^ 6); // 12 (XOR, 1100)

System.out.println(1 << 1); // 2
System.out.println(1 << 3); // 8

System.out.println(8 >> 3); // 1
System.out.println(9 >> 3); // 1 (맨 오른쪽 1이 밀려나가면 그냥 없어진다)

System.out.println(-9 >>> 3); // 결과가 무조건 양수. 양수로 바꾸고 연산한다.

System.out.println(true & 3); // error

// 연산 한번에 5초라면, 
System.out.println(true & false); // 10초
System.out.println(true && true); // 10초
System.out.println(true | false); // 10초
System.out.println(true || false); // 5초
  • (복합)할당 연산: =, +=, -=, &=, >>=, %=
int x = 10;
int y = 6;
y &= x;
System.out.println(y); // 2
  • 삼항 연산: (조건) ? (true) : (false)
int score = true ? 100 : 99;	
System.out.println(score); // 100
  • 단항 연산: ++, --
int x1 = 10;
int x2 = x1++; // x2 = x1이 먼저 실행하고, x1++이 실행된다.
  • 참조 연산: ., ,, (), ...
    (상위 요소).(하위 요소) 또는 ['a', 'b', 'c'] 등 배열, 상속 등에 사용된다.
    ...은 매개변수 배열연산에 사용된다.

statement (제어문)

  • if-else
  • switch-case: 조건문에 정수, 문자형, 문자열만 올 수 있다. break, default를 잊지 말자.
  • for, while
aaa: for (int i = 0; i < 10; i++) {
	bbb: for (int j = 0; j < 10; j++) {
		ccc: for (int k = 0; k < 10; k++) {
			System.out.print(k);
		
        	if (k > 5)
				break aaa; // aaa를 정지
		}
		System.out.println();
	}
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
...

public static void main(String[] args) throws IOException { // BufferedReader 쓸려면 예외 throw 필요
...

boolean bool = true;
		
InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
		
int i = 0;
while (bool) {
	System.out.println("aaa");
	String x = br.readLine(); // 특정 값 입력
		
	if (x.equals("x")) 
		break;
		
	i++;
}
...

배열

int[] sus = new int[5]; // default 0, 정적할당
int[] sus2 = new int[] {0, 0, 0, 0, 0}; // 0 5개 동적할당, 출력 동일
int[][] suss = new int[5][10]; // [열][행], 이차원배열
int[][] suss2 = new int[][] {{11, 22, 33}, {44, 55, 66}}; // 이차원 동적할당 배열

String[] strs = new String[5]; // default null, 다른건 int와 같다.
String[] strs2 = {"aaa", "bbb", "ccc"}; // 좌변에 타입이 정의되어있다면, 이렇게도 가능하다.
strs2 = {"ccc", "ddd", "eee"}; // error
profile
개발자를 꿈꾸는 사람

0개의 댓글