이 기사에서는 모든 Java 학습자에게 Java 변수가 무엇이며 어떻게 사용하는지 설명합니다.
자바 변수란?
Java의 변수는 상자로 생각할 수 있습니다. 이 "상자"에는 특정 크기가 있습니다. 할당된 메모리입니다. 할당되는 메모리의 양은 변수의 유형에 따라 다르지만 이에 대해서는 잠시 후에 이야기하겠습니다. 동시에 상자 자체의 크기는 만든 후에 변경할 수 없지만 내용물은 변경할 수 있습니다. 상자가 비어 있을 수 있습니다. 일부 값을 "삽입"한 다음 추출하여 다른 값을 입력할 수 있습니다. 따라서 변수는 Java 프로그램 실행 중에 데이터 값을 저장하는 필드입니다. 이 상자에는 다음과 같은 중요한 기능이 있습니다.- 항상 하나의 값만 포함할 수 있습니다(또는 비어 있을 수 있으며 이 경우 기본값이 포함됨).
- 데이터 유형이 있습니다. 크기는 데이터 유형과 장소가 할당된 특정 메모리 영역(위치)에 따라 다릅니다.
![Java의 변수 - 1](https://cdn.codegym.cc/images/article/b3c5ef2b-7f16-4b75-9b33-3acaa7dbbb7c/800.jpeg)
변수를 선언하는 방법
Java에서 변수를 선언하려면 유형과 이름을 지정해야 합니다. 다음은 세 가지 변수를 선언하는 예입니다.
int myInt;
String s;
Object variableName;
여기서 int , String 및 Object 는 데이터 유형이고 myInt , s , variableName 은 변수 이름입니다. 데이터 유형은 프로그램의 필요에 따라 선택해야 하며 이름을 선택하여 내용이 명확하도록 하는 것이 좋습니다. 물론 초보자에게는 그렇게 엄격하지는 않지만 대규모 프로젝트에서는 's'와 같은 변수 이름이 코드의 가독성을 손상시킬 수 있습니다. 따라서 처음부터 변수의 용도를 명확하게 하는 방식으로 변수 이름을 지정하는 데 익숙해지는 것이 좋습니다. 물론 이유가 있습니다.
변수를 초기화하는 방법
변수를 선언하면 변수에 대한 메모리를 할당합니다. 초기화는 "상자"에 특정 값을 "넣는" 것을 의미합니다. 이 작업은 변수 선언 중 또는 나중에 수행할 수 있습니다. 또한 변수의 값은 프로그램 실행 중에 변경될 수 있습니다. 예:
public class VariableTest {
public static void main(String[] args) {
int myInt = 5;
String s;
s = "init";
System.out.println(s);
s = s+5;
System.out.println(s);
}
}
여기에서 myInt 변수를 한 줄로 선언 및 초기화하고 즉시 메모리를 할당하고(모든 int 숫자에 대해 32비트) 이름을 지정한 다음 할당된 메모리에 값 5를 배치했습니다. 그런 다음 우리는 문자열 s 에 대한 메모리 공간을 할당하고 있다고 선언했으며 이미 별도의 명령으로 "init" 값을 입력했습니다. 그런 다음 문자열을 출력하고 변수 s 의 값을 변경했습니다 . 이 프로그램에서는 행을 출력했으며 실행하면 다음과 같은 결과를 볼 수 있습니다.
초기화 초기화5
Java의 변수 데이터 유형: 원시 및 비원시
Java에서 변수의 데이터 유형은 두 그룹으로 나뉩니다.- 기본 데이터 유형에는 byte , short , int , long , float , double , boolean 및 char 가 포함됩니다.
- String , Arrays 및 Classes 와 같은 기본이 아닌 데이터 유형
public class VariableTest {
public static void main(String[] args) {
int myInt = - 5; // integer (whole number)
float myFloat = 2.718281828459045f; // Floating point number
char myLetter = 'a'; // character
boolean myBool = true; // boolean
String myText = "Hero"; // String
System.out.println(myInt + " " +
myFloat +" " + myLetter + " " + myBool + " " + myText);
Student myStudent = new Student("Walker","Johnny", "Kyle", null);
}
}
int , char , boolean 및 float 은 프리미티브입니다. 문자열 은 기본이 아닙니다. myStudent 변수는 어떻습니까 ? 이것은 사용자가 만든 Student 클래스의 개체입니다 . 기본이 아닌 변수에 대한 작업을 설명하기 위해 간단히 작성되었습니다. 이 프로그래밍 언어의 거의 모든 것이 객체이기 때문에 Java에서 대부분입니다. 이해를 돕기 위해 Student 클래스 의 코드는 다음과 같습니다 .
import java.util.Date;
public class Student {
String surname;
String name;
String secondName;
Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases
public Student(String surname, String name, String secondName, Date birthday ){
this.surname = surname;
this.name = name;
this.secondName = secondName;
this.birthday = birthday == null ? 0 : birthday.getTime();
}
@Override
public int hashCode(){
//TODO: check for nulls
//return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
return (surname + name + secondName + birthday).hashCode();
}
@Override
public boolean equals(Object other_) {
Student other = (Student)other_;
return (surname == null || surname.equals(other.surname) )
&& (name == null || name.equals(other.name))
&& (secondName == null || secondName.equals(other.secondName))
&& (birthday == null || birthday.equals(other.birthday));
}
}
Java의 변수 유형: 로컬, 인스턴스 및 정적
Java에는 세 가지 유형의 변수가 있으며 다음과 같이 나열했습니다.- 지역 변수
- 인스턴스 변수
- 정적 변수
지역 변수
메서드 본문 내에서 선언된 변수를 지역 변수라고 합니다. 또한 지역 변수는 생성자와 블록 내부에서 선언됩니다. 로컬 변수는 생성된 메서드, 생성자 또는 블록 내에서만 사용할 수 있으며 클래스의 다른 메서드는 변수가 존재한다는 사실조차 인식하지 못합니다. 그래서 지역 변수는 메소드, 생성자 또는 블록이 입력되면 생성되고 변수는 메소드, 생성자 또는 블록이 작동하지 않으면 소멸됩니다. 지역 변수는 static 키워드로 정의할 수 없습니다. 더 나아가 지역 변수에 대한 액세스 한정자를 사용할 수 없습니다. 다음은 예입니다.
public class VariableTest {
public static void main(String[] args) {
System.out.println(myMethod("C plus "));
}
private static String myMethod(String myString) {
String myOtherString = "plus";
return myString + myOtherString;
}
}
여기서 myOtherString은 지역 변수입니다. 다른 방법에서는 사용할 수 없지만 myMethod . 지역 변수는 기본값을 가질 수 없습니다. 프로그램에서 하나 이상의 지역 변수가 초기화되지 않으면 프로그램이 올바르게 작동하지 않습니다. 이전 예제 중 하나를 약간 변경하고 myBool 변수를 초기화하는 것을 "잊어 봅시다":
public class VariableTest {
public static void main(String[] args) {
int myInt = - 5; // integer (whole number)
float myFloat = 2.718281828459045f; // Floating point
char myLetter = 'a'; // character
boolean myBool; // boolean
String myText = "Hero"; // String
System.out.println(myInt + " " +
myFloat +" " + myLetter + " " + myBool + " " + myText);
Student myStudent = new Student("Walker","Johnny", "Kyle", null);
}
}
프로그램을 실행하려고 하면 오류가 발생합니다.
오류:(10, 50) java: myBool 변수가 초기화되지 않았을 수 있습니다.
인스턴스 변수
클래스 내부에 있지만 메서드, 생성자 또는 블록의 본문 외부에 선언된 변수를 인스턴스 변수라고 합니다. 인스턴스 변수는 new 키워드를 사용하여 객체를 생성할 때 생성됩니다 . 객체가 파괴되면 파괴됩니다. 정적으로 선언할 수는 없지만 인스턴스 변수에 액세스 한정자를 사용할 수 있습니다. 인스턴스 변수는 클래스의 모든 메서드, 생성자 및 블록에 대해 표시됩니다. 일반적으로 인스턴스 변수는 비공개이지만 하위 클래스의 가시성을 변경할 수 있습니다. 로컬 변수와 달리 인스턴스 변수에는 기본값이 있습니다. 모든 숫자 기본 유형의 경우 기본값은 0이고 부울의 경우 false이며 객체 참조의 경우 null입니다. 선언 중에 또는 생성자 내에서 값을 할당할 수 있습니다. 다음은 예입니다.
//instance variable example
public class Employee {
// here we have a public instance variable. It is visible for this class and child classes
public String name;
//this instance variable is private so it’s visible for the Employee class only. You can use setters and getters to get it
private double salary;
public Employee (String empName) {
name = empName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double employeeSalary) {
salary = employeeSalary;
}
public static void main(String args[]) {
Employee employee = new Employee("Johnny");
employee.setSalary(1500);
System.out.println("name = " + employee.getName());
System.out.println("salary = " + employee.getSalary());
}
}
정적 변수
static으로 선언된 변수를 정적 변수라고 합니다. Java는 메서드, 생성자 또는 블록 외부에서 이러한 변수를 선언할 수 있도록 합니다. 로컬일 수 없으며 인스턴스가 아닌 클래스에 속합니다. 즉, 클래스의 모든 인스턴스 간에 생성되고 공유된 정적 변수의 단일 복사본을 의미합니다. 정적 변수에 대한 메모리 할당은 클래스가 메모리에 로드될 때 한 번만 발생합니다. 모든 가시성을 가질 수 있지만 일반적으로 공개로 선언됩니다. 인스턴스 변수와 같은 기본값도 있습니다.
public class Box
{
public void add(int data)
{
Storage.sum = Storage.sum + data;
Storage.count++;
}
public void remove(int data)
{
Storage.sum = Storage.sum - data;
Storage.count--;
}
}
public class Storage
{
public static int count = 0;
public static int sum = 0;
}
위의 예에서는 별도의 Storage 클래스를 만들고 count 및 sum 변수를 이 클래스로 이동하고 정적으로 선언했습니다. 공용 정적 변수는 모든 프로그램 메서드에서 액세스할 수 있습니다(메서드뿐만 아니라). 배운 내용을 보강하려면 Java 과정에서 비디오 강의를 시청하는 것이 좋습니다.
GO TO FULL VERSION