본문 바로가기
JAVA

JAVA 7일차

by teg0 2025. 8. 13.

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