Static
static 변수와 static 메서드는 정적메모리에 저장된다.
프로그램 실행시점에 메모리가 생성되며, 객체생성없이도 접근이 가능하다.
모든객체가 공유하여 사용한다.
static 변수
클래스에 소속된 모든 인스턴스가 공유하는 변수, 한 클래스에서 공통적인 값을 유지할 때 사용.
객체생성없이 클래스명.변수명 형태로 접근 가능하며, 일반적으로 final과 함께 많이 사용.
static 메서드
인스턴스 변수없이 클래스 단위로 호출할 수 있는 메서드, 객체상태와 무관하게 동작하는 반복적인 기능 구현시 유용
단, 인스턴스 변수나 인스턴스 메서드에 직접접근이 불가 -> this 키워드 사용 불가
public class Run {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Counter c1 = new Counter("첫번째객체");
Counter c2 = new Counter("두번째객체");
Counter.showCount();
c1.showCount();
}
}
객체를 생성할때마다 Static 변수인 count가 증가.
public class Counter {
//클래스 변수 -> 프로그램 시작과 동시에 메모리에 할당, 프로그램 종료시 반환
static int count = 0;
//인스턴스 변수
String name;
//alt+shift+s -> o 생성자 단축키
public Counter(String name) {
this.name = name;
count++; //인스턴스 생성시마다 1증가
}
//클래스 메서드
public static void showCount() {
//System.out.println(name); -> 인스턴스 변수 접근 불가
System.out.println("현재 생성된 객체 수 : " + count);
}
}
Static메서드는 클래스명.메서드명으로 사용하는 것을 추천
객체배열
같은 타입의 객체 여러개를 하나의 배열에 저장해서 관리하는 것
단, 배열의 각 요소가 객체자체를 저장하는 게 아니라 객체의 주소(참조값)을 저장.
배열 생성시 객체까지 자동으로 생성되는 것이 아니라, 각 요소에 객체를 직접 생성해서 넣어야함
public class Book {
//필드(private) -> 정보은닉
private String title; //제목
private String genre; //장르
private String author; //저자
private int maxPage; //페이지수
public Book() {
super();
}
public Book(String title, String genre, String author, int maxPage) {
super();
this.title = title;
this.genre = genre;
this.author = author;
this.maxPage = maxPage;
}
//Getter, Setter
//alt + shift + s -> r : 생성단축키
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getMaxPage() {
return maxPage;
}
public void setMaxPage(int maxPage) {
if(maxPage < 1) {
this.maxPage = 1;
return;
}
this.maxPage = maxPage;
}
}
package cm.kh.objectarray;
public class Run {
public static void main(String[] args) {
//1. 객체 배열 선언 및 생성
Book[] books = new Book[3]; //=Book book1, book2, book3;
for(Book b : books) System.out.print(b + " ");
books[0] = new Book();
books[1] = new Book();
books[2] = new Book();
System.out.println();
for(Book b : books) System.out.print(b + " ");
books[0].setTitle("어린왕자");
books[1].setTitle("이기적유전자");
books[2].setTitle("라플라스의 마녀");
String[] str = new String[3];
str[0] = books[0].getTitle();
str[1] = books[1].getTitle();
str[2] = books[2].getTitle();
System.out.println();
System.out.println(str[0]);
System.out.println(str[1]);
System.out.println(str[2]);
}
}
객체 배열은 참조 변수처럼 주소를 저장.
'JAVA' 카테고리의 다른 글
| JAVA 9일차 (1) | 2025.08.18 |
|---|---|
| JAVA 8일차 (3) | 2025.08.14 |
| JAVA 6일차 (3) | 2025.08.12 |
| JAVA 5일차(2) (0) | 2025.08.11 |
| JAVA 5일차(1) (2) | 2025.08.11 |