자바에 관한 몇가지 중요한 사실들 정리
[자바란?]
처음부터 객체지향언어로 개발되었으며, 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 참조변수는 해당 인스턴스의 주소를 가리킨다.
| class Car { private String modelName; private int modelYear; Car(String modelName, int modelYear) { this.modelName = modelName; this.modelYear = modelYear; } } | cs |
this를 붙혀서 Car클래스의 매개변수 주소를 읽어옴
| Car() { this("차", 2019); } | cs |
이렇게도 호출가능
[메소드 오버로딩]
한 클래스는 원래 같은 이름의 메소드를 두개이상 가질 수 없다.
-> 오버로딩을 이용해 이러한 문제점을 보완
오버로딩의 조건
-> 메소드의 이름이 같아야하며, 매개변수 개수, 타입이 달라야한다.
코딩 배우기 좋은 사이트
출처 : http://tcpschool.com/