소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스의 이름을 사용해야한다. 하지만, 매번 패키지명을 붙여서 작성하기란 여간 불편한 일이 아니다.
클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스이름에서 패키지명은 생략할 수 있다.
import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음, 모든 클래스이름 앞에 패키지명을 붙여 준다.
import...java.util.Date today = new java.util.Date();
java.text.SimpleDateFormat date = new java.text.SimpleDateFormat("yyy/MM/dd");
java.text.SimpleDateFormat time = new java.text.SimpleDateFormat("hh:mm:ss a");
But if you import
Date today = new Date();
SimpleDateFormat date = new SimpleDateFormat("yyy/MM/dd");
SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
java.lang.* implicitlyQ. 컴퓨터 아키텍처 설계상 RAM의 static 세그먼트와는 무관한 거야? 기능만 비슷하고?
A. 네, Java의 static 메모리 영역과 컴퓨터 아키텍처 설계에서의 RAM의 static 세그먼트는 개념적으로 다릅니다. 이 둘은 이름이 비슷하고 기능적으로 일부 유사한 점이 있지만, 실제 메모리의 구현 방식과 용도는 다릅니다.
컴퓨터 아키텍처에서 Static Segment는 주로 프로그램의 정적 데이터(static data)를 저장하기 위한 메모리 영역입니다. 이 정적 데이터는 다음을 포함할 수 있습니다:
• 전역 변수: 프로그램 실행 내내 유지되는 데이터.
• 정적 변수: 특정 블록이나 함수에 종속되지만, 프로그램이 종료될 때까지 메모리에 유지.
• 초기화된 데이터: 프로그램 시작 시 초기값을 가지는 변수들.
특성:
• 위치: 일반적으로 RAM의 특정 영역에 위치하며, 프로그램 실행 중 메모리에 항상 상주.
• 언어 독립적: 컴파일러가 해당 데이터를 위한 메모리 공간을 할당.
• 하드웨어 의존적: 시스템 메모리 구조 및 운영체제에 따라 크기와 위치가 결정.
Java에서의 static 키워드와 JVM의 Static 영역(Method Area)은 하드웨어 수준의 메모리 세그먼트가 아니라, JVM이 추상화한 메모리 관리 모델에 속합니다.
특성:
• 위치: 컴퓨터 아키텍처의 RAM에서 직접적으로 static 세그먼트를 사용하는 것이 아니라, JVM 내부의 Method Area 또는 Heap의 일부로 관리됩니다.
• JVM 의존적: Java의 static 메모리 구현은 JVM 사양에 따라 다르며, 특정 하드웨어 메모리 구조에 직접적으로 대응하지 않습니다.
• 역할:
• 클래스 수준의 데이터 공유.
• 프로그램 실행 중 JVM에서 해당 데이터를 관리.
특징 컴퓨터 아키텍처 Static Segment Java의 static 메모리
위치 하드웨어 RAM의 정적 데이터 세그먼트 JVM 내부(Method Area 또는 Heap)
관리 주체 컴파일러 및 OS JVM
데이터 범위 전역 변수, 정적 변수 클래스 수준의 변수 및 메서드
하드웨어 의존성 하드웨어와 밀접하게 연결 JVM이 추상화하여 하드웨어와 무관
언어 독립성 언어 독립적 Java에 종속
둘 다 정적 데이터의 유지와 공유를 위해 사용되며, 프로그램 실행 중 일정한 데이터를 저장하는 기능적 유사점이 있습니다:
1. 프로그램 실행 내내 유지:
• 컴퓨터의 static segment와 Java의 static 변수는 프로그램 실행이 끝날 때까지 메모리에 유지됩니다.
2. 초기화:
• 컴파일 단계에서 초기화된 데이터는 프로그램 시작 시 메모리에 로드됩니다.
3. 공유 가능:
• Java의 static 변수처럼 컴퓨터 static segment의 데이터도 여러 함수나 프로세스에서 공유 가능합니다.
Java의 static 메모리와 컴퓨터 아키텍처의 RAM static 세그먼트는 실제 메모리 구현과 관리 방식에서 다릅니다.
• Java의 static 메모리는 JVM에 의해 추상적으로 관리되며, 특정 하드웨어나 RAM 세그먼트와 직접적인 연결이 없습니다.
• 컴퓨터 아키텍처의 Static Segment는 하드웨어와 운영체제 수준에서 구현됩니다.
즉, 두 개념은 이름과 일부 기능적 유사성을 가질 뿐, 실제로는 독립적인 개념입니다.
Static method cannot use instance memberse since their existance is not assured when the static method calls them(besides, static method exist all the time.)
If the modifier is used for a variable, it becomes a constant, if it's used for method, it cannot be overrided. If it's used for a class, it cannot be a super class.
final variable can be assigned by constructor once after declaration.
| target | meaning |
|---|---|
| class | means there are a abstract method within the class |
| method | means the method is composed with only declaration part and uncomplete features part. |
public class TimeTest {
public static void main(String[] args) {
Time t = new Time(12, 35, 30);
System.out.println(t);
t.setHour(t.getHour()+1);
System.out.println(t);
}
}
class Time{
private int hour;
private int minute;
private int second;
Time(int hour, int minute, int second){
setHour(hour);
setMinute(minute);
setSecond(second);
}
public int getHour(){
return hour;
}
public void setHour(int hour){
if (hour < 0 || hour > 23) return;
this.hour = hour;
}
public int getMinute(){
return minute;
}
public void setMinute(int minute){
if (minute < 0 || minute > 59) return;
this.minute = minute;
}
public int getSecond(){
return second;
}
public void setSecond(int second){
if (second < 0 || second > 59) return;
this.second = second;
}
public String toString(){
return hour + ":" + minute + ":" + second;
}
}