2022. 6. 30. 20:09ㆍJava
Java
> 자바는 썬 마이크로시스템즈(Sun Microsystems)에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.
> TIOBE INDEX에 따르면 2022 6월 기준 프로그래밍 언어 선호도 3위 언어이다.
자바의 특징
> 운영체제(Operating System, 플랫폼)에 독립적이다.
> 객체 지향적이다.
> 자동 메모리 관리(Garbage Collection)를 한다.
> 네트워크와 분산처리를 지원한다.
> 멀티 쓰레드를 지원한다.
> 동적 로딩(Dynamic Loading)을 지원한다.
> 비교적 배우기 쉽다.
자바 활용도
> 웹 애플리케이션
> 모바일 애플리케이션
> 엔터프라이즈 애플리케이션
> 웹/앱 서버
자바 프로그램 작성 / 실행 과정
Java 소스코드는 CPU가 인식하지 못하기 때문에 기계어로 컴파일을 해줘야 합니다.
자바는 코드를 저장하면 *.java라는 파일이 생기는데 그 파일을 컴파일하면 컴파일러(javac)를 통해서 000.class라는 바이트코드(byte code)로 바꿔줍니다. 그 바이트 코드를 JVM이 내부적인 처리를 통해 컴퓨터가 해석할 수 있는 바이너리 코드(binary code)로 바꿔주게 되고 그 후 그 코드를 읽은 컴퓨터가 프로그램을 실행하게 됩니다.
이를 요약하자면 다음과 같습니다.
> 자바소스코드 -> CPU 인식 못함 -> 기계어로 컴파일 필요!
> 자바 코드 저장 -> *.java 파일 생성 -> 컴파일(javac) -> *.class 바이트코드(byte code) -> JVM -> binary code -> 실행
JVM(Java Virtual Machine)
Write once, run everywhere
Write once, run anywhere
위는 자바의 이점을 표현하는 대표적인 표어입니다. 자바를 개발한 썬 마이크로시스템즈에 의해 만들어졌습니다.
"한번 코드를 작성한다면 어디서든 돌아간다. "라는 말은 얼핏 들으면 '문제없는 코드라면 당연하게 어디서든 작동해야 하는 거 아냐?'라는 생각이 들게 합니다
하지만 컴퓨터 운영체제끼리는 서로 호환되지 않습니다. 예를 들어 윈도우에서 컴파일한 프로그램은 윈도우에서 돌릴 수 없습니다. 따라서 Java가 나오기 이전에는 코드를 각 운영체제 특성에 맞게 수정해야 하였습니다.
자바로 작성된 애플리케이션은 모두 JVM에서 실행되기 때문에 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요합니다.
이 JVM은 운영체제에 종속받지 않지 않고 CPU가 Java를 인식, 실행할 수 있게 합니다.
Java는 JVM이라는 가상 머신을 거쳐 운영체제에 도달하기 때문에 운영체제가 인식할 수 있는 기계어로 바로 컴파일되는 것이 아닌 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환됩니다.
JVM을 통해 자바 프로그램이 운영체제의 독립적일 수 있는 것입니다. 하지만 JVM은 운영체제에 종속적이어서 썬 마이크로시스템즈에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있습니다.
또한 JVM은 실행에 필요한 사항을 관리하고, 메모리 정리를 자동으로 수행(Garbage Collection)합니다.
JVM에 대한 더 자세한 내용은 아래에서 다루겠습니다.
2022.07.18 - [Java] - Java 메모리 구조
자바 플랫폼(Java Platform)
> 자바 언어로 작성된 프로그램이 실행되는 특정한 환경이다.
> 자바 플랫폼 = JVM + Java API
> Java API: 다른 소프트웨어 구성 요소 또는 응용 프로그램을 만드는 데 사용할 수 있는 소프트웨어 구성 요소 모음이다.
자바 플랫폼 종류
Java SE(Standard Edition): 기본 개발 환경
Java EE(Enterprise Edition): 서버 기반 프로그램 개발 환경
Java ME(Micro Edition): 모바일, 임베디드 시스템 개발 환경
Java FX: 데스크톱 애플리케이션과 리치 인터넷 애플리케이션 개발 환경
자바로 프로그램 작성하기
> Hello.java
class Hello {
public static void main(String[] args) {
System.out.println("Hello, world."); //화면에 글자를 출력한다.
}
}
> 실행 결과
Hello, world.
위 예제는 'Hello, world'를 출력하는 간단한 프로그램입니다.
intellij와 같은 통합개발환경 통해 위와 같이 작성한 다음 'Hello.java'로 저장합니다. 이때, 클래스의 이름 Hello와 이름 'Hello'가 대소문자까지 정확히 같아야 합니다.
자바에서 모든 코드는 반드시 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성하게 됩니다.
public static void main(String[] args)는 main메서드의 선언부인데 프로그램을 실행할 때 미리 약속된 부분입니다.
모든 클래스가 main메서드를 갖는 것은 아니지만, 하나의 Java애플리케이션에는 main메서드를 포함하는 클래스가 반드시 하나는 있어야 합니다. main메서드는 자바 애플리케이션의 시작점이므로 main메서드 없이는 자바 애플리케이션은 실행될 수 없기 때문입니다.
하나의 소스 파일에 하나의 클래스만을 정의하는 것이 보통이지만, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능합니다.
이때, 소스 파일의 이름은 public class의 이름과 일치해야 합니다. 만일 public class가 없다면 어느 클래스 이름으로 해도 상관없습니다.
올바른 작성 예 | 설명 |
// Hello2.java public class Hello2 {} class Hello3 {} |
public class가 이름이 있는 경우 , 소스 파일의 이름은 반드시 public class의 이름과 일치해야 한다. |
// Hello2.java class Hello2 {} class Hello3 {} |
public class가 하나도 없는 경우, 소스 파일의 이름은 'Hello2.java', 'Hello3.java' 둘 다 가능하다. |
잘못된 작성 예 | 설명 |
// Hello2.java public class Hello2 {} public class Hello2 {} |
하나의 소스 파일에 둘 이상의 public class가 존재하면 안 된다. |
// Hello3.java public class Hello2 {} class Hello3 {} |
소스 파일의 이름이 public class 이름과 일치하지 않는다. 'Hello2.java'로 변경해야 한다. |
// hello2.java public class Hello2 {} class Hello3 {} |
소스 파일의 이름과 public class 이름이 일치하지 않는다. 클래스 이름은 파스칼 표기법을 원칙으로 한다. 파스칼 표기법 (Pascal case): 단어의 첫 머리를 대문자를 이용하여 표기하는 표기법 ex) PascalCase YouOnlyLiveOnce |
'Java' 카테고리의 다른 글
JVM (0) | 2022.07.18 |
---|---|
변수 (0) | 2022.06.30 |
상수(final) (0) | 2022.06.30 |
리터럴(literal) (0) | 2022.06.30 |
자주 발생하는 에러와 해결 방법 (0) | 2022.06.30 |