독서하는 개발자's Blog

반응형


자바에 관한 몇가지 중요한 사실들 정리

[자바란?]

처음부터 객체지향언어로 개발되었으며, JVM(자바 가상머신)을 사용하여 운영체제와는 독립적으로 동작한다.

즉, 어느 운영체제에서든지 실행이 가능하다.


[자바의 역사]

맨 처음 자바는 임베디드 프로그램을 위한 언어로 썬사의 제임스 고슬링팀에 의해 개발되었다.

1991년 오크(Oak)라는 이름으로 시작, 1996년 자바(Java)로 이름이 바뀌었으며, 1998년 웹에서 자바를 돌릴 수 있게 해주는 자바 애플릿(Java Applet)이 나오면서 자바의 위치는 급상승된다.

2009년 썬 마이크로시스템즈사는 오라클과 인수 합병되어 오라클의 소유권이 넘어가게 된다.


[자바의 장, 단점]

운영체제와의 독립, 자동 메모리 관리 지원, 제네릭 도입에의한 코드 가독성 증가 - 장점

실행하기위해 JVM을 거쳐야함으로 다른 언어에 비해 실행 속도가 느림, 코드의 길이가 긴편 - 단점


[자바 컴파일러란?]

자바 소스 코드를 JVM이 이해할 수 있도록 자바 바이트 코드로 변환해준다.

자바 설치하고나면 javac.exe라는 파일 형태로 설치


[자바 바이트코드]

JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미.

바이트 코드의 확장자는 .class


[변수의 선언 방식]

변수만 선언하는 방법 ex) int num;

- 이 는 변수 선언으로 메모리 할당만 받은 상태, 즉, System.out.println(num) -> 에러

- 나중에라도 변수를 초기화 시켜줘야한다.  num = 10;

변수와 선언 동시에 초기화하는 방법 ex) int num = 10;


[타입 변환 방식]

묵시적 타입 변환(자동) ex) double num = 10;  -> 10.0 int형 리터럴을 받아서 double형으로 변환

명시적 타입 변환(강제) ex) double num = (double)num2 -> int형 num2 변수를 double형으로 변환


[메모리 구조]

자바 프로그램이 실행될 때, JVM은 OS로부터 필요한 메모리 할당받음.

메모리가 낮은 순으로 클래스, 클래스 변수 -> 객체 인스턴스 -> 메소드, 지역 변수, 매개 변수 순


클래스, 클래스 변수(메소드 영역) / 객체 인스턴스(힙 영역) / 메소드, 지역 변수, 매개 변수(스택 영역)


메소드영역 - 클래스 사용시, 해당 클래스의 클래스 파일(.class)을 읽고, 그 정보를 메소드 영역에 저장.

힙 영역      - 자바에서 사용되는 모든 인스턴스 변수가 저장되는 영역. new 키워드를 사용해서 만든 객체(인스턴스) 생성 시, 힙 영역에 저장.

    - 메모리의 낮은 주소에서 높은 주소의 방향으로 할당

스택 영역   - 메소드가 호출될 때 메소드의 스택 프레임이 저장되는 영역.

    - JVM은 메소드가 호출되면, 메소드 호출과 관계되는 지역 변수 및 매개변수를 스택 영역에 저장.

    - 메소드 호출이 완료되면 삭제

    - 메모리의 높은 주소에서 낮은 주소의 방향으로 할당

    - 후입선출 방식


[클래스(class)의 구성]

필드(field) - 변수, 메소드(method) - 특정 작업을 하기 위한 명령문, 생성자 - 변수 재정의(재 초기화)

클래스는 객체(사물)를 만들어 내기 위한 설계도


[메소드 정의 문법]

접근제어자 반환타입 메소드이름(매개변수목록){

}

ex) public void board(num, title){

System.out.println(num + '의 제목은 ' + title)이다. 

}


[메소드를 사용하는 이유]

중복코드의 반복적인 프로그래밍을 피하기 위해서, 모듈화로 인한 가독성 향상, 유지보수의 용이

메소드 작성 시, 되도록 하나의 메소드에 하나의 기능만 들어가는 것이 좋다.


[생성자]

클래스의 매개 변수 값을 재 초기화 하기위해서 사용한다.

클래스 생성자는 어떠한 반환값도 주면 안됨.


[this 참조변수]

인스턴스가 자기 자신을 참조하는 데 사용하는 변수.

this 참조변수는 해당 인스턴스의 주소를 가리킨다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car {
 
    private String modelName;
 
    private int modelYear;
 
 
    Car(String modelName, int modelYear) {
 
        this.modelName = modelName;
 
        this.modelYear = modelYear;
 
    }
 
}
cs

this를 붙혀서 Car클래스의 매개변수 주소를 읽어옴


1
2
3
 Car() {
        this("차"2019);
        }
cs

이렇게도 호출가능


[메소드 오버로딩]

한 클래스는 원래 같은 이름의 메소드를 두개이상 가질 수 없다.

-> 오버로딩을 이용해 이러한 문제점을 보완

오버로딩의 조건

-> 메소드의 이름이 같아야하며, 매개변수 개수, 타입이 달라야한다.


코딩 배우기 좋은 사이트

출처 : http://tcpschool.com/



반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band