객체에 속성을 부여하는 방법은 클래스에 멤버 변수를 선언하면 됩니다. 멤버 변수가 무엇인지 그리고 객체에 속성을 어떻게 부여하는지 알아봅시다.
ㅤ
클래스 내에 선언된 변수를 멤버 변수라고 하며, 멤버 변수에는 인스턴스 변수와 정적 변수가 있습니다.
class Person {
String name; // 인스턴스 변수
int age; // 인스턴스 변수
String sex; // 인스턴스 변수
static string nationality = “korea”; // 정적 변수
}
ㅤ
인스턴스를 생성 후에 접근 가능한 변수를 인스턴스 변수라고 하며, 인스턴스 변수는 인스턴스의 생성과 소멸 생명주기와 동일합니다. 인스턴스가 소멸하면 인스턴스 변수도 소멸합니다.
Person person1 = new Person();
person1.name = “록카”; // 인스턴스 변수
person1.sex = “female”; // 인스턴스 변수
ㅤ
인스턴스를 생성하지 않아도 접근 가능한 변수를 정적 변수라고 합니다. 또는 클래스 변수라고 부릅니다. nationality 정적 변수는 모든 Person 클래스에서 동일한 메모리를 참조하기 때문에 변수를 공유한다고도 볼 수 있습니다.
정적 변수는 인스턴스의 생성과 소멸 생명주기와 상관없이 프로그램이 시작되면 메모리에 적재되기 때문에 인스턴스 생성 없이 접근할 수가 있습니다.
String nation = Person.nationality; // 정적 변수
ㅤ
실습도구에 해당 코드를 작성해 봅시다
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
// TODO : 해당 인스턴스에 값을 저장
person1.name = "김철수";
person1.age = 17;
Person person2 = new Person();
// TODO : 해당 인스턴스에 값을 저장
person2.name = "김나연";
person2.age = 27;
// TODO: 인스턴스의 변수 값을 출력
System.out.println(person1.name);
System.out.println(person1.age);
System.out.println(person2.name);
System.out.println(person2.age);
}
}
출력
김철수
17
김나연
27
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
static String job = "개발자";
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
System.out.println(Person.job);
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.job);
System.out.println(person2.job);
}
}
출력
개발자
개발자
개발자
ㅤ
코드 작성(Person.java)
class Person {
static String job = "개발자";
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
System.out.println(Person.job);
Person.job = "마케터";
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.job);
System.out.println(person2.job);
}
}
출력
개발자
마케터
마케터
정적 변수 공유 확인하기 - 코드를 오른쪽 창에서 아래와 같이 옮겨서 실행했더니 에러가 나타났습니다. 어떤 부분이 잘못됐을까요? public class Main { class Person { static String job = "개발자"; } public static void main(String[] args) { System.out.println(Person.job); Person.job = "마케터"; Person person1 = new Person(); Person person2 = new Person(); System.out.println(person1.job); System.out.println(person2.job); } }
안녕하세요. 코드라떼입니다 :) Main 클래스내에 또하나의 클래스를 작성하는 것을 inner class라고 하는데요. 자바 8 언어에서는 inner class내에 정적 변수를 선언할 수 없습니다. 감사합니다 :)
person.java와 main.java가 다른것인가요? 두개를 구분해서 작성해야하는 이유가 있나요?
안녕하세요. 코드라떼입니다. Person.java는 Person 클래스를 구현한 파일이고 Main.java는 프로그램의 진입점(Entry Point)인 main 정적 메서드가 존재하는 파일입니다. main 정적 메서드가 꼭 Main.java 파일의 Main 클래스 내에 존재할 필요는 없으나 반드시 특정한 클래스 내에는 존재해야 합니다. 그리고 편의상 Main 클래스 내에 작성했습니다. '일반적으로' 객체(클래스)를 만들 때 특별한 사유가 있지 않는 이상 파일별로 만듭니다. 클래스 이름과 java 파일의 이름은 동일해야 합니다. 감사합니다.^^
추가노트의 실습해보기의 코드를 보고 인스턴스 변수와 정적 변수를 작성해보세요.
객체에 속성을 부여하는 방법은 클래스에 멤버 변수를 선언하면 됩니다. 멤버 변수가 무엇인지 그리고 객체에 속성을 어떻게 부여하는지 알아봅시다.
ㅤ
클래스 내에 선언된 변수를 멤버 변수라고 하며, 멤버 변수에는 인스턴스 변수와 정적 변수가 있습니다.
class Person {
String name; // 인스턴스 변수
int age; // 인스턴스 변수
String sex; // 인스턴스 변수
static string nationality = “korea”; // 정적 변수
}
ㅤ
인스턴스를 생성 후에 접근 가능한 변수를 인스턴스 변수라고 하며, 인스턴스 변수는 인스턴스의 생성과 소멸 생명주기와 동일합니다. 인스턴스가 소멸하면 인스턴스 변수도 소멸합니다.
Person person1 = new Person();
person1.name = “록카”; // 인스턴스 변수
person1.sex = “female”; // 인스턴스 변수
ㅤ
인스턴스를 생성하지 않아도 접근 가능한 변수를 정적 변수라고 합니다. 또는 클래스 변수라고 부릅니다. nationality 정적 변수는 모든 Person 클래스에서 동일한 메모리를 참조하기 때문에 변수를 공유한다고도 볼 수 있습니다.
정적 변수는 인스턴스의 생성과 소멸 생명주기와 상관없이 프로그램이 시작되면 메모리에 적재되기 때문에 인스턴스 생성 없이 접근할 수가 있습니다.
String nation = Person.nationality; // 정적 변수
ㅤ
실습도구에 해당 코드를 작성해 봅시다
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
// TODO : 해당 인스턴스에 값을 저장
person1.name = "김철수";
person1.age = 17;
Person person2 = new Person();
// TODO : 해당 인스턴스에 값을 저장
person2.name = "김나연";
person2.age = 27;
// TODO: 인스턴스의 변수 값을 출력
System.out.println(person1.name);
System.out.println(person1.age);
System.out.println(person2.name);
System.out.println(person2.age);
}
}
출력
김철수
17
김나연
27
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
static String job = "개발자";
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
System.out.println(Person.job);
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.job);
System.out.println(person2.job);
}
}
출력
개발자
개발자
개발자
ㅤ
코드 작성(Person.java)
class Person {
static String job = "개발자";
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
System.out.println(Person.job);
Person.job = "마케터";
Person person1 = new Person();
Person person2 = new Person();
System.out.println(person1.job);
System.out.println(person2.job);
}
}
출력
개발자
마케터
마케터
정적 변수 공유 확인하기 - 코드를 오른쪽 창에서 아래와 같이 옮겨서 실행했더니 에러가 나타났습니다. 어떤 부분이 잘못됐을까요? public class Main { class Person { static String job = "개발자"; } public static void main(String[] args) { System.out.println(Person.job); Person.job = "마케터"; Person person1 = new Person(); Person person2 = new Person(); System.out.println(person1.job); System.out.println(person2.job); } }
안녕하세요. 코드라떼입니다 :) Main 클래스내에 또하나의 클래스를 작성하는 것을 inner class라고 하는데요. 자바 8 언어에서는 inner class내에 정적 변수를 선언할 수 없습니다. 감사합니다 :)
person.java와 main.java가 다른것인가요? 두개를 구분해서 작성해야하는 이유가 있나요?
안녕하세요. 코드라떼입니다. Person.java는 Person 클래스를 구현한 파일이고 Main.java는 프로그램의 진입점(Entry Point)인 main 정적 메서드가 존재하는 파일입니다. main 정적 메서드가 꼭 Main.java 파일의 Main 클래스 내에 존재할 필요는 없으나 반드시 특정한 클래스 내에는 존재해야 합니다. 그리고 편의상 Main 클래스 내에 작성했습니다. '일반적으로' 객체(클래스)를 만들 때 특별한 사유가 있지 않는 이상 파일별로 만듭니다. 클래스 이름과 java 파일의 이름은 동일해야 합니다. 감사합니다.^^
추가노트의 실습해보기의 코드를 보고 인스턴스 변수와 정적 변수를 작성해보세요.