zkvn99

[Java] Basic Syntax 본문

Language/Java

[Java] Basic Syntax

zkvn1103 2023. 7. 30. 20:37

Java는 정적 유형의 객체 지향 프로그래밍 언어이며, 플랫폼 독립적이다.

더보기

정적 유형은 프로그램의 변수와 표현식의 데이터 유형이 컴파일 시점에 결정되는 것

Java는 변수의 데이터 유형을 명시적으로 선언하여 정적 유형 언어라서

컴파일 시점에 타입 오류를 찾아내고 런타임 중에 발생할 수 있는 일부 오류를 사전에 방지함

 

플랫폼 독립적인 이유

더보기

Java의 개발 및 실행에 중요한 역할을 하는 도구들 덕분이다.

 

JDK(Java Development Kit) : Java 개발을 위해 필요한 도구들을 제공하는 패키지

  • javac : Java 언어로 작성된 소스 코드를 컴파일하여 바이트 코드로 변환

JRE(Java Runtime Environment) : Java 프로그램의 실행 환경을 제공하는 패키지

  • JDK에 포함된 컴파일러와 개발 도구들을 제외한 부분만 포함
  • JVM : 바이트 코드를 읽어 들여 해당 플랫폼에 맞게 인터프리터 방식으로 실행하며, JIT(Just-In-Time) 컴파일러를 사용하여 바이트 코드를 기계어로 변환하여 실행

JVM(Java Virtual Machine) :  Java 프로그램을 실행하는 데 사용 (운영체제와 Java 프로그램 간의 중간 계층)

  • 바이트 코드 실행 : .class 파일에 있는 바이트 코드를 실행하는 데 사용

정리하자면, 

  1. Java로 작성된 소스 코드 .java 파일
  2. JDK에 포함된 javac가 .java를 바이트 코드로 변환 .class 파일 (JVM에서 실행할 수 있는 중간 단계 코드)
  3. JVM이 바이트 코드를 읽어들여 해당 플랫폼에 맞게 해석하고 실행하면서 JIT 컴파일러를 사용하여 바이트 코드를 해당 플랫폼의 기계어로 동적으로 변환하고 최적화

 

Java에는 Primitive typesReference types의 두가지 데이터 유형 범주가 있다

 

Primitive types

Java 언어에서 미리 정의한 데이터 유형으로, 변수가 직접 값을 저장

더보기

정수형 (Integer Types) : byte, short, int, long

부동 소수점형 (Floating-Point Types) : float, double

문자형 (Character Type) : char

논리형 (Boolean Type) : boolean

 

메모리에 고정된 크기로 저장되며, 값이 바로 저장됨 -> 변수에는 실제 값 자체가 저장

스택 메모리에 저장 - 스택 메모리는 크기가 제한적이지만 데이터의 할당과 해제가 빠르고 접근 시간이 빠름

Reference types

 

객체가 가리키는 참조를 변수에 저장 - 즉, 변수에는 객체의 메모리 주소가 저장

  • 객체는 힙 메모리에 생성되고, 변수는 해당 객체의 주소를 가리킴
// Person 클래스 정의
class Person {
    String name;
    int age;
}

// Person 클래스의 인스턴스 생성
Person person = new Person();
person.name = "John";
person.age = 30;

// person 변수는 해당 인스턴스의 주소를 가리킴 (Person 클래스의 객체를 참조하는 참조 변수)
더보기

참조 데이터 유형에는 사용자가 정의한 클래스, 인터페이스, 배열, 열거형(Enum) 등이 포함

 

힙 메모리는 동적으로 할당되는 메모리 영역으로, 객체와 배열 등의 데이터가 저장

Java의 가비지 컬렉터에 의해 사용되지 않는 객체들이 자동으로 해제

 

정리하자면

  1. 변수명과 원시 타입의 데이터는 스택에 저장
  2. 모든 객체 타입(String,Integer,ArrayList ..)은 힙에 저장

Identifier

더보기

대소문자를 구분  ex) count != Count

시작 문자는 문자로 시작해야 하며, 숫자로 시작할 수 없음

길이에 제한이 없지만 64KB 이상의 크기를 가진 식별자를 지원하지 않음

예약어 사용 금지

특수문자 _ $ 외의 문자는 사용 불가능

클래스 이름은 대문자로 시작해야 하며, 카멜 표기법을 따름 ex) Person, CarFactory

변수와 메서드 이름은 소문자로 시작해야 하며, 카멜 표기법을 따름 ex) age, printMessage

상수 이름은 모두 대문자로 작성하며, 단어들은 밑줄로 구분 ex) MAX_SIZE, PI_VALUE

 

식별자와 네이밍 규칙을 따르면 가독성 향상 및 유지보수 측면에서 용이함

Reserved Keywords

abstract continue for new switch
assert(디버깅) default if package synchronized
(동기화)
boolean do goto private this
break double implements protected throw
byte else import public throws
case enum
(열거형)
instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp
(부동 소수점 연산)
volatile
(변수가 캐시 X)
const
(Java 10~ 사용 X)
float native
(외부 메서드 호출)
super while

Java Program Structure

Java 프로그램의 기본 단위 - Class

  • 클래스의 이름은 유효한 식별자여야 함 (위에 Identifier 참고)
  • 클래스는 접근 제어자를 가져야 함 (public, protected, default, private)
  • 클래스 파일의 이름은 해당 클래스 이름과 동일해야 함
public class ClassName { // ClassName - 클래스 이름
    public static void main(String[] args) { // 메인 메서드 (프로그램의 진입점)
        int i = 5; // 멤버 변수
        int j = 3;
        double k = a + b;
        System.out.println( i + " + " + j + " = " + k); // 8.0
    }
} // 중괄호로 감싸진 코드의 묶음 : 코드 블록 (변수의 스코프를 결정하는데 영향)

 

kamranahmedse의 자바 로드맵을 기반으로한 학습입니다

https://github.com/kamranahmedse/developer-roadmap

 

GitHub - kamranahmedse/developer-roadmap: Interactive roadmaps, guides and other educational content to help developers grow in

Interactive roadmaps, guides and other educational content to help developers grow in their careers. - GitHub - kamranahmedse/developer-roadmap: Interactive roadmaps, guides and other educational c...

github.com

 

* 참고 자료

https://www.baeldung.com/java-syntax

 

'Language > Java' 카테고리의 다른 글

[Spring] 데이터 전달  (0) 2023.09.16
[Java] Exception Handling  (1) 2023.08.01
[Java] 코딩테스트 자주 쓰는 메서드  (0) 2023.06.27
[Java] Array & Collection  (0) 2023.05.27
[Java] int 배열 vs Integer 배열  (0) 2023.05.26