JUST GO

[공통] Java 본문

Java/학습내용

[공통] Java

root_go 2022. 10. 11. 11:40

Java

1. 언어적 특성

  • 자바는(Java)는 운영체제(OS, Operating System) 중립적  언어로, JRE(Java Runtime Environment)가 지원되는 모든 언어에서 동일하게 작동한다. 이를 가능하게 해주는 환경을 JVM(Java Virtual Machine)이라 한다.
  • 자바 언어를 이용하여 개발하기 위해 사용하는 SDK(Software Development kit)은 JDK(Java Development kit)이고,              JDK는 JRE를 포함하고 있다.
  • 즉, 결론적으로 자바 프로그램을 실행만 하면 되는 환경이라면 JRE를, 개발도 해야하는 환경이라면 JDK를 설치하면 된다.

2. 시작점

  • 모든 프로그램은 실행 시의 시작점이 필요한데, 자바에서는 main 메서드(Method)가 그 역할을 한다.
  • main 메서드는 정적(Static)이어야 하고 매개변수로 문자열(String) 배열을 하나 받는다.
  • JDK 설치

3. 주석

  • 여느 언어와 같이 주석(Comment)은 컴파일 및 실행에 영향을 미치지 않으며 길든 짧든 없든 있든 성능에 영향을 미치지 않는다.
  • 중요하거나 복잡한 부분, 혹은 클래스나 메서드에 설명을 남겨놓는 습관을 들이는 것이 좋다.
  • 한 줄 주석은 // 로 사용한다.
  • 여러줄 주석은 /* .... */ 방식으로 사용한다.

4. 접근 제한자(Access Modifier)

  • 접근 제한자는 어떠한 대상(클래스, 인터페이스, 열거형, 메서드, 멤버 변수 등)에 대한 (외부의) 접근을 제한하기 위해 사용한다.
  • public : 해당 대상에 접근하는데 제한이 없음.
  • protected : 동일한 패키지 경로 혹은 상속 관계에서만 접근할 수 있음.
  • (default) : 동일한 패키지 경로에서만 접근할 수 있음.(실제로 default 라고 쓰면 안 되고 생략해야 한다.)
  • private : 동일한 클래스 내에서만 접근할 수 있음.

5. 패키지(Package)

  • 어떠한 대상들을 종류별/목적별로 구분하기 위해 존재하는 것. 실제로 까보면 그냥 디렉토리(폴더)이다.
  • 전 세계에 존재하는 수 많은 자바 프로젝트들 간의 의존성(Dependency) 관계에서 충돌하는 것을 막기 위해 패키지 경로의 시작은 소유한 도메인의 역순인 경우가 많다.
  • 패키지 경로는 [도메인 네임의 역순].[프로젝트 Artifact ID(정체성)] 으로 지정하는 경우가 많다. 예로 들면 아래와 같음.
    • '네이버 카페'의 경우 : com.naver.cafe
    • '네이버 블로그'의 경우 : com.naver.blog
  • 패키지 경로는 package 키워드를 이용하여 구성 요소의 가장 상단에 적혀있다.
  • 어떠한 구성요소의 풀네임은 [패키지 경로].[구성요소의 이름] 으로, 흔히 사용하는 String의 풀네임은 java.lang.String 인데, 여기서 java.lang은 패키지 경로, String이 구성요소의 이름이다.

6. 정적(static) 및 비정적(Non-static)

  • 정적인 것(주로 멤버)은 프로그램 실행과 동시에 객체화가 이루어 지거나 존재가 확인된다.
  • 정적인 컨텍스트에서 비정적인 것에 바로 접근할 수 없으며, 객체화된 변수를 통하여 접근할 수 있다. 반대로, 비정적인 컨텍스트에서 정적인 것에 접근하는데에는 제한이 없다.(시간의 흐름에 대해 고려할 것)
  • 정적인 것에 접근할 때에는 타입을 통해 접근한다.(System.out 처럼)
  • 비정적인 것에 접근할 때에는 객체를 통해 접근한다.(out.println 처럼)
  • 정적인 대상은 어느 관점에서 보든 동일한 대상이다.

7. 기타 개념

  • 구문(Statement) : 실행 단위이다. 변수 및 상수 선언, 대입 연산증감 연산을 하거나 메서드를 호출하는 등의 행위 하나를 구문이라 한다. 자바에서는 하나의 구문이 끝난 뒤에는 반드시 세미콜론(;)을 끝에 붙인다.
  • GC(Garbage Collector) : 접근점이 소실된 변수나 상수를 메모리에서 제거(Free)한다.
  • 오버플로우(Overflow) : 기초 타입에서 발생하며 어떤 타입이 가질 수 있는 최대 값 보다 1 더 큰 값 혹은 최소값 보다 1 더 작은 값을 대입할 경우 최대값이 최소값으로, 최소값이 최대값으로 변하는 현상이다. 가령 Integer.Max_VALUE + 1Integer.MIN_VALUE와 같다. 엄밀히 말하면 최소값에서 1을 빼면 최대값이 되는 것은 언더플로우(Underflow)이다. 
  • 리터럴(Literal) : 어떠한 값을 사용할 때 변수나 상수가 아닌, 직접 적은 모든 값을 리터럴이라 한다. 리터럴 연산시 형변환은 기초타입(+ 문자열)에서 보다 규모가 큰 것으로 변하게 된다.
    • float 타입의 경우 리터럴 뒤에 F를 붙여야 한다. 가령, float pi = 3.14F;
    • double 타입의 경우 리터럴 뒤에 D를 붙이는게 좋다. 가령 double pi = 3.14D;
    • long 타입의 경우 리터럴 뒤에 L을 붙여야 한다. 가령 long l = 33333L;
    • int, byte, boolean, char 타입의 경우 서픽스(Suffix)가 따로 없다.
      • 이는 모든 정수형 리터럴을 서픽스없이 적게 되면 int로 인식되기 때문이다.
      • short 및 byte 를 적기 위해서는 강제 형변환이 필수적이다. 가령, byte b = (byte) 10;
      • boolean 은 사실 true 혹은 false 뿐이고, char 는 홑따옴표라는 특수기호를 사용함으로 서픽스가 있을리가...
  • 의존성(Dependency) : 직접 개발하기 난해하고(필요성이 떨어지고), 사용하고자 하는 기능이 대체적으로 공통적인(가령 JSON) 것들에 대해 (공인된) 개발자 (혹은 팀)가 개발해 놓은 외부 프로젝트를 가져와서 사용하는 것 혹은 그러한 성질.
  • 의존성 관리자(Dependency Manager) : 현재 개발 중인 프로젝트에 외부 의존성을 주입하거나 제거하는 등의 관리 체계를 제공하는 것. 대표적으로 메이븐(Maven)과 그래들(Gradle)이 있다. 그 외 종류도 많은데 의존성 관리자가 하는 일은 모두 동일하며 다만 작성하는 방식이 서로 조금씩 다를 뿐.
  • 유틸리티 클래스(Utility Class) : ~Utils 의 명명법을 (주로) 가진다. 객체화를 못하도록 막는 것이 일반적이며, 이는 정적이고 상수인 멤버나, 정적인 메서드만 가진다. 주로 자주 사용하는 코드를 서로 관련있는 것들 끼리 묶어내는 역할을 한다.

'Java > 학습내용' 카테고리의 다른 글

[공통] 연산자  (0) 2022.10.12
[공통] 타입  (0) 2022.10.11
[공통] 변수와 상수  (0) 2022.10.11
[공통] 메서드  (0) 2022.10.11
[공통] 클래스  (0) 2022.10.11