[JAVA] 자바 기본 구조

gogori6565·2022년 9월 17일

JAVA

목록 보기
1/11

📌 자바의 기본 구조

클래스

//Hello 라는 이름의 클래스 선언
public calss Hello {
}
  • class 키워드로 클래스 선언
  • public 으로 선언 시 다른 클래스에서 접근 가능

주석

  • // 또는 /**/

메소드

  • C/C++ 에서의 함수를 메소드로 지칭
public static int sum(int n, int m){
...
}
  • 클래스 바깥에 작성 불가
    즉, 위에서 작성한 public class Hello{} 의 { } 안에 메소드들을 작성해야함
  • main() 도 메소드임

main() 메소드

  • 자바는 main()에서 실행 시작
public static void main(String[] args){
}
  • public static void 로 선언
  • String[] args 로 실행 인자를 전달 받음

메소드 호출

  • C/C++ 에서의 함수 호출 처럼 호출하면 됨
    ex) sum(10,20)

변수 선언

  • 변수 타입과 변수 이름 선언
    ex) int i=20; //C와 동일
  • 메소드 내에서 선언된 변수는 지역 변수
    지역 변수는 메소드 실행이 끝날 시 소멸
  • 세미콜론(;)으로 문장을 끝내야함

화면 출력

  • 표준 출력 스트림에 메시지 출력
System.out.println("Hello");
  • 표준 출력 스트림 System.out 의 println() 메소드를 호출한 거임
  • println() 은 여러 타입의 데이터 출력 가능, 출력 후 다음 행으로 커서 이동

식별자

  • 클래스, 변수, 상수, 메소드 등에 붙이는 이름

식별자 원칙

  • 특수 문자, 공백, 탭은 식별자 사용 불가. 그러나, _ $ 는 사용 가능
  • 유니코드 문자 가능, 한글 불가
  • 자바 언어의 키워드 불가
  • 첫 글자 숫자 불가
  • boolean 리터럴 (true, false) 와 널 리터럴 (Null) 은 불가
  • 길이 제한 X
  • 대소문자 구별
    ex) Test 와 test 는 별개의 식별자

📌 자바 데이터 타입

자바의 변수형은 프리미티브 타입과 레퍼런스 타입으로 나뉜다.

프리미티브 타입

: 값을 변수에 대입하여 사용하는 형태

  • 특징 : 기본 타입의 크기가 정해져 있음 / CPU나 운영체제에 따라 변하지 않음
  1. boolean - 1 bit
  2. char - 2 byte
  3. byte - 1 byte
  4. short - 2 byte
  5. int - 4 byte
  6. long - 8 byte
  7. float - 4 byte
  8. double - 8 byte

레퍼런스 타입

: 값을 변수에 대입하지만 변수는 참조값(메모리상)을 가지고있지 값(프리미티브타입 값들로 이루어진)을 직접 들고있지는 않는 것이 특징

  1. 배열(array)에 대한 레퍼런스
  2. 클래스(class)에 대한 레퍼런스
  3. 인터페이스(interface)에 대한 레퍼런스

📌 문자열

문자열은 기본 타입이 아니다

  • String 클래스로 문자열을 표현

    • 문자열 리터럴 - "JDK" , "한글"
    String toolName = "JDK"
    • 문자열이 섞인 + 연산 -> 문자열 연결
    toolName + 1.8  //"JDK1.8"
    "(" + 3 + "," + 5 + ")"  //"(3,5)"
    System.out.println(toolName + "이 출시됨");  //"JDK1.8이 출시됨" 출력

📌 리터럴

리터럴(literal)

: 프로그램에서 직접 표현한 값

  • 정수, 실수, 문자, 논리, 문자열 리터럴 있음
    ex) 12, 23.123, '%', true, "hello"

정수 리터럴

  • 10, 8, 16, 2진수 리터럴
15 -> 10진수 리터럴 15
015 -> 0으로 시작하면 8진수. 십진수로 13
0x15 -> 0x로 시작하면 16진수. 십진수로 21
0b0101 -> 0b로 시작하면 2진수. 십진수로 5
  • 정수 리터럴은 int 형으로 컴파일
  • long 타입 리터럴은 숫자 뒤에 L 또는 l 을 붙여 표시
    ex) long a = 24L;

실수 리터럴

  • 소수점 형태나 지수 형태로 표현한 실수
    ex) 12. 12.0 .1234 0.1234 1234E-4

  • 실수 타입 리터럴은 double 로 컴파일

  • 숫자 뒤에 f(float) 나 d(double) 을 명시적으로 붙이기도 함

float f = 0.1234f;
double d = .1234D; //단, .1234D 와 .1234 는 동일하게 취급

문자 리터럴

  • 단일 인용부호('')로 문자 표현
char a = 'A';
char b = '글';
char c = \u0041; // 문자 'A'의 유니코드 값(0041) 사용
char d = \uae00; // 문자 '글'의 유니코드 값(ae00) 사용

\u 다음에 4자리 16진수(2byte의 유니코드)로 나타내기도 함

특수문자 리터럴

\b 백스페이스
\t 탭
\n 라인피드 (line feed)
\f 폼피트 (form feed)
\r 캐리지 리턴 (carriage return)
\" 이중 인용부호 (double quote)
\' 단일 인용부호 (single quote)
\\ 백슬래시 (backslash)

논리 리터럴 / boolean 타입

  • true / false
  • boolean 타입 변수에 치환하거나 조건문에서 사용
boolean a = true;
boolean b = 10 > 0; // 10>0가 참이므로 b 값은 true
boolean c = 1; // 타입 불일치 오류. C/C++와 달리 자바에서 1,0을 참, 거짓으로 사용 불가

C/C++와 달리 자바에서 1,0을 참, 거짓으로 사용 불가

그 외 리터럴

Null 리터럴 : 레퍼런스에 대입 사용

int n = null; //불가능!! 기본 타입에 사용 불가
string str = null; //가능~

문자열 리터럴 (스트링 리터럴)

  • 이중 인용부호로 묶어 표현
    ex) "Hello World", "자바"
  • 문자열 리터럴은 String 객체로 자동 처리함

tip1. JDK7 부터 숫자에 _ 허용함. -> 가독성을 높임

  • 숫자 리터럴의 아무 위치에나 언더스코어 _ 를 허용함
  • 컴파일러는 리터럴에서 _ 를 빼고 처리
int price = 20_100; // 20100과 동일
long cardNumber = 1234_5678_1357_9998L; // 1234567813579998L와 같음
long controlBits = 0b10110100_01011011_10110011_111110000;
long maxLong = 0x7fff_ffff_ffff_ffffL;
int age = 2______5; // 25와 동일

허용되지 않는 4가지 경우

int x = 15_; // 오류. 리터럴 끝에 사용할 수 없다.
double pi = 3_.14; // 오류. 소수점(.) 앞뒤에 사용할 수 없다.
long idNum = 981231_1234567_L; // 오류. _L(_F) 앞에 사용할 수 없다.
int y = 0_x15; // 오류. 0x 중간이나 끝에 사용할 수 없다. 0x_15(오류)

tip2. var 키워드로 변수 타입 생략

  • var 와 동일한 기능으로 C++의 auto 가 있다
  • 지역 변수의 선언에만 사용 가능
  • 변수 타입 선언 생략 -> 컴파일러가 타입 추론
var price = 200; // price는 int 타입으로 결정
var name = "kitae"; // name은 String 타입으로 결정
var pi = 3.14; // pi는 double 타입으로 결정
var point = new Point(); // point는 Point 타입으로 결정
var v = new Vector<Integer>(); // v는 Vector<integer> 타입으로 결정
  • 단, 변수 선언문에는 반드시 초기값을 지정해야함
var name; //컴파일 오류, 타입 추론 불가

📌 상수

  • final 키워드 사용
  • 선언 시 초기값 지정
  • 실행 중 값 변경 불가
final double PI = 3.14;
profile
나대로 열심히 하다보면 또 어딘가에 닿아있겠지 p(´∇`)q

0개의 댓글