Part09 - static

uglyduck.dev·2020년 9월 27일
0
post-thumbnail

Man

package com.mywork.ex;
/*
	static

	1. 사전적 의미 : 정적
	2. 정적 : 미리 만듦
	   동적 : 나중에 만듦 (new)
	3. static 사용 이유
		1) 모든 객체(인스턴스)가 공유하기 위해서
		2) 객체(인스턴스) 생성(new) 없이 클래스를 사용하기 위해서
	4. static 동작
		1) static 멤버(필드나 메소드)는 프로그램 실행 직전 미리 만들어진다.
		2) 객체(인스턴스) 생성되기 전에 미리 만들어진다.
		3) 객체(인스턴스) 생성(new) 없이도 만들어진다.
		4) 하나의 static 멤버가 만들어지면 모든 객체(인스턴스)가 공유한다.
	5. static 멤버 접근 방식
		1) 필드 : 클래스명.필드명
		2) 메소드 : 클래스명.메소드명()
*/
public class Man {
	// Fields
	String name; 
	int age;
	final static char GENDER = '남';
	
	// Constructor
	Man(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	// Method
	void output() {
		System.out.println("성명 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("성별 : " + GENDER);
	}
}

ManMain

package com.mywork.ex;

public class ManMain {
	// main 메소드에 static이 필요한 이유
	// main 메소드를 포함하는 클래스의 객체(인스턴스) 생성 없이도 main 을 호출하기 위해서
	// 예) new ManMain() 없이 main 메소드의 호출을 위해 static이 반드시 필요하다.
	public static void main(String[] args) {
		Man man = new Man("홍길동", 20);
		man.output();
		
		// GENDER 필드는 static 필드이기 때문에 new와 상관없이 접근이 가능하다.
		System.out.println(man.name);    // System.out.println(Man.name); // 불가능
		System.out.println(man.age);     // System.out.println(Man.age); // 불가능
		
		System.out.println(man.GENDER);     // 추천하지 않음! (인스턴스를 통한 접근)
		System.out.println(Man.GENDER);     // 추천! (클래스를 통한 접근)
	}
}

StaticSample

package com.mywork.ex;
import javax.swing.JOptionPane;

public class StaticSample {

	public static void main(String[] args) {
		// 그 동안 사용한 static 멤버들
		System.out.println();
		JOptionPane.showInputDialog("입력메시지");
		JOptionPane.showMessageDialog(null, "출력메세지");
		System.out.println(Math.PI);
		
		// 공통점
		// new System, new JOptionPane, new Math 가 필요 없다.
	}
}

Team

package com.mywork.ex;

public class Team {
	
	// Fields
	String name;
	static int count;   // 모든 Team이 공유할 수 있는 static 필드
	
	// Constructor
	Team(String name){
		this.name = name;
		count++;
	}
	
	// Method
	void output() {
		System.out.println("이름 : " + name);
		System.out.println("현재 팀원 : " + count + "명");
	}
}

TeamMain

package com.mywork.ex;

public class TeamMain {
	public static void main(String[] args) {
		Team member1 = new Team("홍길동");
		Team member2 = new Team("홍길순");
		
		member1.output();
		member2.output();
		
		System.out.println("전체 팀원 : " + Team.count);
	}
}
profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글