자바프로그램이 어떻게 실행되는가
JVM이란 무엇인가 (JVM을 할면 자바의 특징을 알 수 있다.)
- Java의 첫 번째 큰 특징은 플랫폼 독립적인 개발이 가능하다는 것
- 두 번째 특징으로는 자동으로 메모리를 관리해준다는 것(Garbage Collector)
- bytecode: 어떤 OS에서 실행될지 모르기 때문에 확실하게 exe 파일을 만들지는 않고 bytecode(.class) 로 만들어둠. 이를 OS에 맞게 컴파일하여 메모리에 로딩하여 실행
- javac.exe(컴파일), java.exe(실행, JVM에서 실행)
JAVA에서 char는 2byte라서, 한글을 표현할 수 있다.
- 변수가 만들어지면 변수를 관리하는 테이블에 저장이 되는데, 이 테이블은 Symbol Table이다
- 2진수 3개씩 자르면 8진수, 4개씩 자르면 16진수 표현 가능
- 반대로 8진수 1개는 2진수 3개로, 16진수 1개는 2진수 4개로 쪼갤 수 있음
형변환 (casting)
- 형 변환이란?
- 자동형변환 (묵시적) -> 작은 type이 큰 type에 저장되는 경우 (byte -> int)
- 강제형변환(명시적) -> 큰 type이 작은 type에 저장되는 경우 (int -> byte, 손실 발생)
- 현실에 있는 객체의 속성을 뽑아옴
class
- class란 새로운 자료형을 만드는 도구 (틀), 사용자 정의 자료형(UDDT)
instance
- 인스턴스는 객체를 실체화한 것 (붕어빵)
- 변수 하나에 모든 것을 담을 수 없기 때문에, 값들을 참조하는 방식으로 .(dot)를 이용해서 접근
- 새로운 자료형을 만드는 모델링 도구 -> 클래스
- 책이라는 자료형이 Book으로 만들어져 있다. Book b = new Book();
객체가 가지고 있는 동작, 기능을 메서드라고 한다.
- 객체가 가지고 있는 동작(기능)을 메서드(함수) 라고 한다.
- 반복적인 동일 작업을 메서드를 만들어 사용하면 편리.
- 객체지향 프로그램은 객체가 가지고있는 메서드를 통해서 데이터를 주고 받으며 상호작용한다.
- 메서드는 API에서 제공하는 메서드와 사용자 정의 메서드로 분류할 수 있다.
- 메서드는 정의를 하고 호출을 하여 사용된다.
오버로딩
- 하나의 클래스 내에서 동일한 이름의 메서드를 여러 개 사용할 수 있는 객체지향 기법
- 동작이 비슷하기 때문에 메서드 이름을 같게 만들어 사용하면 편하다.
- 오버로딩의 전제조건 -> 메서드의 시그니처가 달라야한다.
public int add(int a, int b) {
int sum = a + b;
return sum;
}
public float add(float a, float b) {
float sum = a + b;
return sum;
}
public int add(int a, int b, int c) {
int sum = a + b + c;
return sum;
}
오버로딩은 실행속도가 떨어지는 원인이 되지 않을까?
- 정적바인딩
- 컴파일 시점에서 사용될 메서드가 결정되는 바인딩
- 따라서 오버로딩을 한다고 프로그램 실행 속도가 떨어지지는 않는다.
자바에서 String은 사용자 정의 자료형이다.
- 사용자 정의 자료형이기 때문에 객체이며, 일반적인 동등 연산자로 비교할 수 없고, equal을 사용해야 한다.