아래 그림을 보면서 자바의 기본 구조를 이해해 보려고 한다.
public class Outer {
String name = "outer";
Inner inner = new Inner();
void ShowOuterName() {
System.out.println(name);
inner.ShowInnerName();
}
class Inner {
String iname = "inner";
void ShowInnerName() {
System.out.println(name + "-" + iname);
}
}
public static void main(String[] args) {
Outer o = new Outer();
o.ShowOuterName();
}
}
main 메서드는 public static void main(String[] args) 형태로 작성하는 것이 원칙이다. static으로 선언하는 이유는 자바는 모두 클래스이기 때문이다. 만약 static이 아니라면 클래스의 객체를 생성하고, 이 객체를 통해 main 메서드를 실행해야 하는데, static으로 선언한다면 객체 생성 없이 바로 main 메서드를 호출할 수 있기 때문이다.
자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일되며 JVM만 있으면 어디서든 실행 가능하다.
자바는 객체 지향 언어이다.
자바는 클래스로만 구성이 되어 있어 캡슐화 원칙을 철저히 지킨다.
자바는 하나의 파일에 하나의 클래스만 존재한다. 만약 한 파일 안에 여러개의 클래스를 작성했다면, 컴파일 단계에서 클래스마다 별도의 클래스 파일(바이트 코드)이 생성된다.
자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성된다.
자바의 실행은 main() 메서드에서 시작되며, 하나의 클래스 파일에 두 개 이상의 main() 메서드가 있을 수 없다. 그러나 각 클래스 파일이 main() 메서드를 가지는 것은 상관없다.
서로 관련 있는 클래스는 패키지로 묶어 관리한다.(패키지는 폴더라고 생각하면 됨)
하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 멀티 스레드를 지원한다.
자바 언어는 메모리를 할당받는 기능은 있지만, 메모리를 반환하는 기능은 없다. 가비지 컬렉션의 의해 자동으로 회수되기 때문이다.(보통 참조 개수가 0인 영역을 제거)
자바의 자료형은 기본 자료형과 참조 자료형이 있다. 기본 자료형에는 int, double, char, boolean와 같은 것들이고, 참조 자료형에는 배열형, 클래스형, 인터페이스형이 있다.
추가로 변수 선언은 클래스 내에서 가능하지만 초기화는 반드시 메서드 내부에서 해야 한다.
참조 자료형은 메모리상의 배열 주소나 객체가 저장된 주소를 갖고 있는 데이터형을 말한다.
여기서 배열과 String이 참조 자료형인 이유는 배열, 클래스, 인터페이스를 모두 동적 할당으로 처리하기 때문이다. 따라서 String 타입의 변수를 선언하고 아무것도 할당하지 않았다면 null값을 갖는다.
상수 선언은 final
키워드를 통해 멤버 필드 영역에서 일반적으로 선언한다. 또한 보통은 static 키워드와 함께 사용하는데, 상수로 선언했다는 것은 특정 객체에 의해서 값이 변경될 일이 없다는 것이기 때문이다.
자바에서는 범위가 더 넓은 쪽으로 자동 형변환이 일어난다. (float → double)
명시적으로 형변환도 가능한데, 이 경우에 주의할 점은 기본 자료형과 참조 자료형 간의 형 변환은 일어나지 않는다는 점이다.
double avg = (double) sum / n;
자바에서는 표준 입력 스트림인 System.in을 통해 사용자로부터 키를 입력받을 수 있다.
하지만 System.in은 입력된 키를 단순한 바이트 정보로 응용프로그램에게 제공하므로, 응용프로그램은 받은 바이트 정보를 문자나 숫자로 변환해야하는 번거로움이 있다. 이를 편하게 사용하게 해주는 Scanner 클래스를 사용하는 것이 효율적이다.
scanner 객체는 System.in 객체를 이용하여 키보드로부터 일련의 바이트 정보들을 입력받고, 이 바이트들을 정수, 실수, 문자, 문자열 등 자바 응용프로그램이 원하는 타입으로 변환하여 리턴한다.
참고로, Scanner는 java.util 패키지 안에 존재한다. 주요 메서드는 아래와 같다.
import java.util.Scanner;
public class ScannerEx {
public static void main(String args[]) {
int i;
double d;
Scanner s = new Scanner(System.in);
System.out.print("정수를 입력하세요: ");
i = s.nextInt();
System.out.print("실수를 입력하세요: ");
d = s.nextDouble();
System.out.println();
System.out.println(i + ", " + d);
}
}
출처
명품 JAVA programming - 황기태, 김효수
https://www.youtube.com/사람만이