하드코딩은 소프트웨어 개발에서 값이나 조건을 코드에 직접 입력하는 것을 가리킵니다. 이는 프로그램 내에서 값을 하드코딩하면 그 값을 변경하거나 업데이트할 때 문제가 발생할 수 있는 것을 의미합니다.
값을 하드코딩하는 것은 코드 내에서 직접 숫자, 문자열 또는 기타 값들을 사용하는 것을 의미합니다.
인스턴스가 생성되지 않아도라는 부분는 static으로 지정된 변수나 메서드가 클래스 자체에 속하며, 해당 클래스의 인스턴스(객체)를 생성하지 않아도 클래스명을 통해 직접 접근 가능하다는 것을 의미합니다.
일반적으로 클래스를 사용하여 객체(인스턴스)를 생성하고, 이 객체를 통해 클래스 내의 변수나 메서드에 접근합니다. 하지만 static 키워드가 지정된 변수나 메서드는 클래스 수준에 속하기 때문에 객체(인스턴스)를 생성하지 않고도 클래스명을 통해 직접 접근할 수 있습니다.
예를 들어, 다음과 같이 static으로 선언된 변수를 사용한 클래스가 있다고 가정해봅시다:
public class Example {
public static int count = 0;
}
이 경우 count 변수는 static으로 선언되었기 때문에, Example.count와 같이 클래스명을 통해 직접 변수에 접근할 수 있습니다. 객체(인스턴스)를 생성하지 않고도 Example.count로 변수에 접근할 수 있습니다.
int currentcount = Example.count; // 클래스명을 통해 직접 접근
따라서, static으로 지정된 변수나 메서드는 객체(인스턴스) 생성과는 무관하게 프로그램 시작과 동시에 메모리에 할당되며, 프로그램이 종료될 때까지 존재하는 특성을 가지고 있습니다.
자바에서는 new 키워드를 사용하여 클래스의 생성자를 호출하여 인스턴스를 만듭니다.
클래스에는 생성자(Constructor)라는 특별한 메서드가 존재하며, 이 생성자를 사용하여 클래스의 객체(인스턴스)를 생성합니다. 보통 생성자는 클래스와 같은 이름을 가지고 있습니다.
아래는 클래스의 인스턴스를 생성하는 방법입니다:
public class MyClass {
// 클래스 내용
}
// 클래스 외부에서 인스턴스 생성
MyClass myObject = new MyClass();
위 예시에서 MyClass는 클래스의 이름이고, myObject는 클래스 MyClass의 새로운 인스턴스를 참조하기 위한 변수입니다. new 키워드를 사용하여 MyClass() 생성자를 호출하여 myObject라는 인스턴스를 생성합니다.
이렇게 생성된 myObject는 클래스 MyClass의 특성을 갖는 새로운 개별 객체(인스턴스)입니다. 이제 myObject를 사용하여 해당 클래스에 정의된 변수, 메서드 등을 활용할 수 있습니다.
// 예시: 인스턴스 변수에 접근
myObject.someVariable = 10;
// 예시: 인스턴스 메서드 호출
myObject.someMethod();
인스턴스를 생성하면, 해당 클래스의 특성을 가진 객체가 메모리에 할당되며, 해당 객체를 통해 클래스 내부의 변수나 메서드에 접근할 수 있습니다.
final과 static를 함께 사용하여 상수를 정의할 때, final 키워드는 값을 변경할 수 없도록 하고, static 키워드는 클래스 수준에 변수를 배치하여 인스턴스마다 별도의 값이 아닌 클래스 전체에서 동일한 값으로 사용할 수 있도록 합니다.
예를 들어, 자바에서 상수를 정의할 때 :
public class Constants {
public static final double PI = 3.14159;
}
여기서 PI는 final 키워드로 값이 변경되지 않는 상수이고, static 키워드로 클래스 수준에 있어 인스턴스와 관계없이 Constants.PI로 접근할 수 있습니다.
이와 같이 final과 static를 함께 사용하여 정의된 상수는 값이 변하지 않고 클래스 수준에서 사용 가능하므로 일반적으로 상수를 나타내는 데 사용됩니다.