들어가기에 앞서

자바의 정석
이 게시물들은 모두 제가 이 책을 읽으며 개인적으로 정리한 내용을 담을 예정입니다.
따라서 제가 기존에 알고있던 내용은 생략되거나 짧게 다루는 등의 가공이 있을 수 있습니다.

자바에 대하여

자바란

자바의 장점으로는 운영체제의 종류와 상관없이 실행가능하다는 것이 있다
운영체제에 따라 프로그램을 전혀 바꾸지 않아도 괜찮은데,
이 덕분에 많은 사용자 확보가 가능하였다.
또한 c++에 비해 간결하고 이해하기 쉬운 표현이 간으하며 풍부한 클래스 라이브러리를 제공하여준다.

자바의 역사

c++의장점 도입+ 단점 보완한 새로운 언어로 탄생한 것
현재에는 에플릿은 보안상 이유로 최신 웹브라우저에서 지원되지 않으며 jsp나 서블릿이 더 많이 사용된다.

자바 언어의 특징

운영체제에 독립적(Write once, run anywhere)

JVM(자바가상머신)과 통신하고,해당 응용프로그램을 운영체제에 알맞게 변환하여 전달해주기 때문에 운영체제에 독립적이다.
그러나 역설적으로 JVM자체는 운영체제에 종속적이기 때문에 여러 버전의 JVM이 존재한다.

객체지향언어

상속 캡슐화 다형성 등이 잘 적용된 순수한 객체지향 언어의 특성을 가지고있다.

그나마 배우기 쉽다

물론 내 기준으로는 코틀린보다 난이도가 높게 느껴지지만, c++과 스몰톡의 장점을 취하며 복잡한 부분은 제거하는 단순화 작업을 거친 언어가 바로 자바이다.
간결하면서 명료한 객체지향적 설계 덕분에 사용자들이 객체지향의 개념을 보다 쉽게 이해하고 활용할 수 있도록 해준 언어가 바로 자바다.

자동 메모리 관리

가비지 컬렉터가 자동으로 메모리를 관리해주기 때문에 프로그래머가 메모리 관리를 해주지 않아도 된다.
c언어에서는 개발자가 직접 malloc이나 free등을 사용하여 메모리 관리를 해야했으나 자바는 그렇지 않다.
자동으로 관리하기 때문에 때로는 비효율적인 면도 있기는 하다.

네트워크와 분산처리 지원

대규모 분산환경을 염두해두고 만든 언어이기 때문에 이에 관련된 다양한 라이브러리가 있다.
그래서 비교적 짧은 시간에 네트워크 관련 프로그램을 개발하는 것이 가능하다.

멀티 쓰레드 지원

운영체제와 관계없이 구현이 가능하며, 관련 라이브러리도 제공한다.
자바 인프린터가 여러 쓰레드에 대한 스케줄링을 담당하여 준다.

스케줄링이란

메모리에 적재된 프로그램을 CPU가 실행할 수 있도록 스레드에 CPU를 할당하는 것
자바에서는 이 역할을 자바 인터프리터가 담당한다.

동적로딩 지원

실행 시 모든 클래스가 로딩되는 것이 아니라, 필요한 클래스만 로딩하여 사용하는 것이 가능하다.
클래스가 일부 변경 되어도 전체 애플리케이션을 다시 컴파일 할 필요도 없다.

JVM

정의: 자바를 실행하기 위한 가상 컴퓨터
하드웨어로 존재하는 것이 아니라, 소프트웨어로 구현된 컴퓨터로 이해하면 됨
자바는 하드웨어에 맞게 완벽히 해석된 상태가 아니어서 실행 시 한번 더 해석되고 속도가 느려지는 것
그러나 요새에는 기계어로 바로 변환 가능한 컴파일러와 최적화 기술 등의 발달로 속도의 격차가 많이 줄었음.

자바 개발환경 구축

환경변수 설정 한 뒤에 cmd에 java -version 으로 잘 설치되었나 꼭 확인하기
나처럼 여러 버전의 자바를 사용하는 경우 첫번째 자바 파일 경로 작성 후 세미콜론을 추가하여 여러개의 경로를 등록할 수 있다.
(나는 이걸 몰라서 몇시간 동안 검색을 했다.) bin 디렉토리의 주 실행파일

javac.exe

자바 컴파일러. 자바소스코드를 바이트 코드로 컴파일

java.exe

자바 인터프리터, 컴파일러가 생성한 바이트 코드 해석 및 실행

javap.exe

역어셈블러, 컴파일된 클래스 파일을 원래의 소스로 변환
그러나, 원래 소스 전체가 아닌 선언부만 저장

자바로 프로그램 작성

import static java.lang.System.out;
class 이름{
    public static void main(String[] args)//main메서드 선언부
    {
        out.ptrintln("Hello,World");
    }
}

책에 나와있는 예제코드와는 조금 다른데 나는 import를 사용하여 println을 보다 간편하게 할 수 있도록 만들어주었다.
자바의 경우 꼭 main메서드를 포함한 클래스가 하나는 있어야만한다.
왜냐하면 이 main이 자바 애플리케이션의 시작지점이기 때문에, 이것이 없으면 자바 애플리케이션이 실행 자체가 불가능하기 때문이다.
또한 하나의 소스 파일에 두가지 클래스를 넣는 것도 가능은 하지만,
소스파일의 이름은 public class의 이름과 일치해야한다.
만약 public class가 없다면 소스파일 내의 어떤 클래스의 이름이든 상관없다.
단 하나의 소스파일에 두 개의 public class는 존재할 수 없다.

자주 발생하는 에러

자바는 변수나 메서드 명에서 대소문자의 구분을 하기 때문에 철자 이외에 대소문자도 확인을 하여야한다.
main클래스가 존재하지 않거나  public static void main(String[] args)에 오타가 있으면 에러가 발생한다.
대신 args는 매개변수 이름이기 때문에 argv와 같은 이름을 사용할 수도 있다.

자바 프로그램의 실행과정

.class파일 로드
클래스 파일 검사(형식 등)
지정된 클래스에서 main호출
이때 main메서드의 첫줄부터 코드가 실행되는데, 마지막 코드까지 모두 실행되면 프로그램은 종료되고 모든 자원들이 반환된다.

주석작성법

한줄짜리 주석은 //을 사용하여 나타낸다.
주석이 여러줄에 걸쳐진다면 /*내용*/을 사용할 수도 있다.
문자열 안에 주석을 넣으면 주석 내용이 문자열로 읽혀버린다.

공부 시 참조 링크

스케줄링과 스레드

가비지 콜렉터와 메모리 누수
자바 환경변수 등록법
혹시나 이 블로그 글 대로 하고 안되는 분들은 bin의 경로를 Path에 직접 등록해주시면 되는 경우도 있습니다.(저는 이 방식으로 해결했습니다.)

댓글남기기