Lewis's Tech Keep

06/15 TIL (자바 문법 기본) 본문

Java/개체지향 프로그래밍 with JAVA

06/15 TIL (자바 문법 기본)

Lewis Seo 2021. 6. 15. 14:40

- 메인 함수

 - JAVA 프로그램 실행 시 반드시 필요한 약속

 - 없을 시에 컴파일 오류 발생

 

- 패키지 목적

 : 이름 중복 시 다른 패키지 안에 있다면 충돌 회피 가능

 : 패키지 이름 중복 최소화

 

- 컴파일 

 : javac(java compile) -d <컴파일 결과물 저장 경로> <컴파일할 .java 파일>

 : 결과물 -> .class 파일 = byte 코드로 되어 있음.

 : java -classpath <클래스 path> <클래스 이름(패키지 이름 포함 해야 함)>

 : .class 파일에는 반드시 main 함수가 있어야 함.

 : 배포 방법 : .jar 파일을 만듦. -> lib

 : jar -> jar -cfm(compile file & manifest) <패스> <manifest>

 

- 자바 is Crossplatform (yes and no at the same time)

 : 맞기도하고 아니기도 하다. (jvm이 올라가 있어야 cross platform 처럼 작동하기 때문)

 : jvm 설치과정이 필요

 

- 자바 정수 자료형

 byte 1바이트

short 2바이트

int 4바이트

long 8바이트

float 4바이트

double 8바이트

boolean 1비트 (1/8 바이트)

char 2바이트

 

unsigned 존재 하지 않음 : color -> byte (-128~127 이라서 불가능 -> short 씀..)

 

- 자바 String

: immutable ->한번 만든 String 은 변경 불가

 

- 리터럴

 16진수 : 0xFF

 2진수 : 0b1100

 8진수 : 0

 float : F or f (소문자가 좀 더 많이 보임)

 \ : escape 문자

 null : null pointer

 _ : 큰 숫자 가독성

 

- final

 할당된 이후에는 바뀌지 않는다는 뜻

  1. 지역변수

  2. 클래스 멤버 변수

  3. 메서드 매개변수

  4. 클래스와 메서드

 

- 문자열 

 string constant pool 에 의해

String name1 = "a";

String name2 = "a";

일 때 name1 == name2 -> true 가 된다 (singleton 과 같은 개념)

 

- java 연산자 오버로딩

 : java는 연산자 오버로딩을 지원하지 않는다.

 

- goto 

 : 은근히 쓸만한 기능 (java의 예약어이긴 하지만 실제 기능까지는 없다)

 : ex1) 3중 포문의 경우 for,for,for -> 안에서 바로 break; 가능

 : 단, 남용하면 실행 순서가 위로 갔다 아래로 갔다 하므로 알기 어려워지게 됨.

 : goto 같은 거 (실제 goto는 아님) 

 loop_exit : 

 for...

   for...

      for...

      break loop_exit;

으로 사용 (break 라벨 이름)

 : 어느 코드로 점프하는 것은 불가능, break 감싸고 있는 라벨만 탈출 가능

 : continue 라벨도 가능

 

 - 다차원 배열

 : 자바 다차원 배열은 진짜 다차원 배열은 아님 

 : C# 배열의 배열이나 C 포인터 배열과 비슷

 : 즉 안쪽 배열 길이가 다 다르게 만들 수도 있음

 

 - 열거형

 : 독자적 or 클래스 내부에 선언 가능

 : 자바에서는 값을 대입하지 못 함.

 : 데이터형으로만 최대로 사용할 것 (다른 언어 쓰던 사람들과 헷갈릴 수 있음)

 

 - var

 : js var과 비슷 컴파일러가 자료형을 추론해 줌(가독성 해칠 수 있어서 최대한 사용 지양)

 : 배열 선언해도 변수이름에 [] 안 됨

 : 선언 동시에 {} 안에 값 넣는 것 불가능

 

 람다 

 : anonymous function 으로 내포 함수라고도 부름 (일회성)

 

 모듈

 : (개인적 의견 : 패키지의 상위 개념이라고 생각함)

 : 기존에는 실행 중에 app이 사용하는 클래스 목록을 찾는 공식적인 방법이 없음

 : 내가 실행 중에 어떤 라이브러리를 로딩해야 하는 지 목록이 없었음

 : 실행 중 오류 발생. 기존에는 모든 필요한 라이브러리를 한번에 다 올렸음 (덩치 너무 커짐)

 : 기존에는 public 클래스 있으면 누구나 다 사용 가능 했었음. (패키지 단위 사용권한 제어가 불가능)

 -> 그래서 모듈이 나옴

 : 각 모듈 안의 패키지를 설정

 

 

 

 

 

 

 

 

Comments