※ 본문은 코드스테이츠에서 제공해준 학습자료를 공부하고 정리한 내용임을 알립니다.
Java 소개
자바는 컴파일러를 통해 기계어로 변환되는 언어
※ 인터프리터는 한 줄씩 실행되는 반면 컴파일러는 모든 파일을 기계어로 변환하여 실행하는 구조
-> 대부분의 경우 컴파일 과정을 거치는 언어들이 인터프리터 언어보다 빠름
Java의 특징
- 이식성이 높은 언어이다.
자바 이전의 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 다르게 작성해야 하는 언어들이 대부분이었지만, 자바는 JRE(Java Runtime Environment) 가 설치되어 있는 모든 운영체제에서 실행 가능하다. - 객체 지향 언어이다.
자바는 OOP(Object Oriented Programming) 개념을 사용하는 언어이다. 그렇기에 모든 기능은 객체로 만들어 사용해야 한다. 여러 부품(객체)들을 만들고 조립하여 하나의 프로그램을 실행하는 개념이 OOP 이다. - 함수적 스타일 코딩을 지원한다.
최근에 함수형 프로그래밍 스타일이 대세를 이루고 있으며 자바 또한 8버전부터 람다식 을 지원하며 함수형 프로그래밍 스타일을 지원하기 시작했다. 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는 것이 쉬워지고 코드가 간결해지는 장점이 있다. - 메모리를 자동으로 관리한다.
자바는 95년에 C++를 개선하고자 하는 목표와 함께 발표되었다. 그래서 자바는 자동으로 메모리를 관리해주는 기능을 추가했다. C, C++의 경우 메모리의 생성과 소멸을 개발자가 직접 설계해야 하였지만 자바는 가비지 컬렉터(Garbage Collector) 를 실행시켜 자동으로 사용하지 않는 메모리를 수거한다.
JVM (Java Virtual Machine)
JVM은 자바 프로그램을 실행시키는 도구
자바가 이식성이 높은 특징이 있는 것은 JVM이 있기에 가능하다. 프로그램이 제대로 실행되기 위해서는 컴퓨터의 다양한 지원(CPU, RAM, 각종 입출력 장치 등)이 필요한데, 이런 자원을 관리하는 것은 운영체제이고, 따라서 프로그램은 운영체제가 정한 규칙을 따라야 한다. 운영체제(Linux, Windows, MacOS 등)가 서로 다르기 때문에 모든 프로그램은 운영체제가 가진 저마다의 다른 규칙을 따르기 위해 별도의 절차가 필요한데, JVM은 이를 해결해주는 도구라고 생각하면 된다.
JVM의 경우 JDK나 JRE를 설치하면 자동으로 설치되며, 자바는 이 JVM을 거치기 때문에 C나 C++에 비해 속도는 느린 편이다. 하지만 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도를 많이 줄여나가고 있다.
JDK (Java Development Kit)
자바를 설치할 때 알아둬야 할 2가지 도구
- JRE (Java Runtime Environment) : JVM + 표준 클래스
- JDK (Java Development Kit) : JRE + 개발에 필요한 도구
- OracleJDK : 오라클 회사에서 관리하는 버전
- OpenJDK : 오픈소스
Java EE & SE
자바 언어의 플랫폼은 자바 가상 머신인 JVM과 개발에 도움이 되는 함수들을 모아둔 도서관인 API로 구성되어 있고, 개발 분야에 따라 크게 4가지로 나뉘어 Java SE, Java EE 등으로 나누어서 제공되고 있다.
Java SE (Java Standard Edition) : 표준 에디션의 자바 플랫폼
가장 기본이 되는 표준 에디션의 자바 플랫폼으로 자바 언어의 핵심 기능 을 제공한다. Java SE의 API는 자바 언어의 기본적인 자료형과 객체에서부터 네트워킹, 보안, 데이터베이스 접근, 그래픽 사용자 인터페이스 개발은 물론 사용자가 입력한 XML을 파싱하는 고수준의 클래스들을 모두 다룰 수 있다.
Java EE (Java Enterprise Edition) : 엔터프라이즈 에디션의 자바 플랫폼
자바 EE 플랫폼은 자바 SE 플랫폼 그 위에 탑재된 플랫폼으로 Java EE만의 API를 추가로 가져와야 사용 가능하다. 주로 서버측 개발을 하기 위한 플랫폼 으로 자바로 구현되는 웹 프로그래밍에서 가장 많이 사용되는 JSP와 Servlet을 포함하여 기업용 대규모, 다계층, 확장성, 신뢰성 그리고 보안 네트워킹 어플리케이션 개발과 실행을 위한 API 및 환경을 제공한다.
Template 이해하기
프로젝트 생성 시 기본적으로 작성되어 있는 템플릿을 이해해보자.
public class App {
public static void main(String[] args) {
}
}
접근 제한자 (Access Modifier)
접근 제한자(Access Modifier)는 클래스, 변수, 메소드의 접근 권한을 명시적으로 작성한 키워드이다. 어떤 클래스의 변수와 메소드를 다른 클래스에서 사용할 수 있는지 없는지 정의할 필요가 있으며, 그래서 나온 것이 접근 제한자이다.
자바에서 사용 가능한 4가지 접근 제한자
- public : 모든 접근을 허용
- private : 현재 객체 내에서만 허용
- protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
- default : 같은 패키지(폴더)에 있는 객체들만 허용
보통 많이 사용하는 접근 제한자는 public과 private이다. 소프트웨어 및 시스템의 보안과 관련하여 최소 권한의 원칙(POLP, Principle Of Least Privilege) 이 있으며, "공개하지 않아도 될 것은 공개하지 않는다"는 원칙이다.
static
자바에서는 모든 코드를 객체로 작성하게 되며, 따라서 자바는 클래스 안에 모든 코드를 작성해야 한다. 하지만 클래스는 실제로 실행하기 위한 객체가 아니라서, 특정 메소드를 바로 사용하기 위해서 는 static 선언을 해주어야 한다. static 키워드는 보통 변수나 메소드 앞에 static 키워드를 붙여서 사용하게 되며, 이들을 정적 필드, 정적 메소드 라고 부른다. 이러한 멤버들은 객체에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고 한다.
return, void
자바의 메소드는 자바스크립트의 함수와 달리 리턴할 값의 자료형(type)을 명시해줘야 한다. 데이터를 리턴하지 않을 경우에는 void 키워드를 쓰며, 특정 자료형을 리턴할 경우에는 자료형을 명시해줘야 한다.
main 메소드
public static void main(String[] args) {
System.out.println("Hello, World!");
}
위 코드를 main 메소드라고 하며, 자바에서 실행된 코드를 작성해주는 메소드이다. 자바는 메소드를 아무 데나 작성하면 안되며, 실행할 메소드라면 main 메소드 안에 작성해야 한다. 자바 프로그램을 실행하면 main() 메소드를 가장 먼저 찾는다. 그리고 main 메소드 안에 있는 것을 순차적으로 실행하며, 전부 실행 완료되면 프로그램을 종료한다.
String[] args
main 메소드의 파라미터는 String[] args라고 작성되어 있다. 이는 아래와 같은 의미를 갖는다.
- main 메소드는 실행 시 하나의 인자를 전달받아야 한다.
- main 메소드의 첫번째 (그리고 유일한) 인자는 String[] 타입을 가져야 한다.
- main 메소드의 첫번째 (그리고 유일한) 인자는 main 메소드의 본문(body)에서 args라는 변수로 접근 가능하다.
이렇게 전달인자의 자료형이 문자열 배열로 되어 있는 이유는 main 메소드가 실행될 때, JVM이 길이가 0인 문자열의 배열을 자동 생성하고, 이 때 전달인자를 String 배열로 전달하기 때문에 main 메소드의 기본 전달인자가 String[] args와 같은 형태로 만들어지는 것이다.
'JVM > Java' 카테고리의 다른 글
예외처리 (0) | 2021.06.26 |
---|---|
객체지향 프로그래밍 (0) | 2021.06.26 |
제어문 (0) | 2021.06.26 |
자료형 (0) | 2021.06.26 |
좋은 객체 지향의 5가지 원칙 SOLID (0) | 2021.03.16 |