본문 바로가기
Example

[E-Java] static 예시

by 송기동 2024. 2. 23.
728x90

<번호표>

package ch08;

public class NumberPrinter {

	private int id;
	private static int waitNumber = 1; // 선언과 동시에 초기화

	public NumberPrinter(int id) {
		this.id = id;
	}

	// 번호표를 출력 합니다.
	public void printWaitNumber() {
		System.out.println(id + "대기 순번은" + waitNumber);
		waitNumber++;
	}

} // end of class
package ch08;

public class NumberPrinterMainTest {

	public static void main(String[] args) {

		NumberPrinter numberPrinter1 = new NumberPrinter(1);
		NumberPrinter numberPrinter2 = new NumberPrinter(2);
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter1.printWaitNumber();
			numberPrinter2.printWaitNumber();
			numberPrinter2.printWaitNumber();
			numberPrinter2.printWaitNumber();
			numberPrinter2.printWaitNumber();
	} // end of main

} // end of class
1대기 순번은1
1대기 순번은2
1대기 순번은3
1대기 순번은4
1대기 순번은5
1대기 순번은6
1대기 순번은7
2대기 순번은8
2대기 순번은9
2대기 순번은10
2대기 순번은11

<사원>

package ch08;

public class Employee {

	// 잠시 공간을 빌려서 코드를 작성한다
	private static int serialNum = 1000;
	private int employeeId;
	private String employeeName;
	private String department;

	public Employee(String employeeName) {
		this.employeeName = employeeName;
		this.employeeId = serialNum;
		serialNum++;
	}

	public int getEmployeeId() {
		return employeeId;
	}

	public void setEmployeeId(int employeeId) {
		this.employeeId = employeeId;
	}

	public String getEmployeeName() {
		return employeeName;
	}

	public void setEmployeeName(String employeeName) {
		this.employeeName = employeeName;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	// serialNum 상태값을 반환하는 기능을 만들어 보자.
	public static int getSerialNum() {
		// 고민 ! - 객체가 메모리에 올라간 상태
		// serialNum++;
		// static 메서드 안에서는 멤버 변수를 사용할 수 없다.
		// department = "개발부서";
		return serialNum;
	}

	// 1. 멤버 변수
	// 2. 지역 변수
	// 3. static 변수
	// 결론 : 어느 메모리 위치에 있느냐에 따라 이름을 구분지어 말할 수 있다.
} // end of class
package ch08;

public class EmployeeMainTest {

	public static void main(String[] args) {

		// static은 먼저 메모리에 올라가는 녀석이다.
		// 클래스 이름으로 접근할 수 있다.
//		int number = Employee.serialNum;
//		System.out.println(number);
		
		//만약 객체가 생성되기 전에 serialNum 값을 알고 싶다면?
		System.out.println(Employee.getSerialNum());
		
		Employee employeeKim = new Employee("김길동");
		Employee employeeLee = new Employee("이순신");
		Employee employee티모 = new Employee("티모");
		System.out.println(employeeKim.getEmployeeId());
		System.out.println(employeeLee.getEmployeeId());
		System.out.println(employee티모.getEmployeeId());
		
		// 외부에서 static 변수에 접근해서 값을 변경할 수 있는 상태이다.
		// Employee.serialNum = 100;
	} // end of main

} // end of class
1000
1000
1001
1002

<학번>

package ch08;

public class SchoolNumber {

	private String name;
	private static int studentNumber = 20230001;

	public SchoolNumber(String name) {
		this.name = name;

	}

	// 학번 출력
	public void PrintSchoolNumber() {
		System.out.println(name + "의 학번은" + studentNumber + "입니다.");
		studentNumber++;
	}
} // end of class
package ch08;

public class SchoolNumberMainTest {

	public static void main(String[] args) {

		SchoolNumber schoolNumberSong = new SchoolNumber("송");
		SchoolNumber schoolNumberSin = new SchoolNumber("신");
		SchoolNumber schoolNumberKim = new SchoolNumber("김");
		SchoolNumber schoolNumberLee = new SchoolNumber("이");
		SchoolNumber schoolNumberPark = new SchoolNumber("박");
		schoolNumberSong.PrintSchoolNumber();
		schoolNumberSin.PrintSchoolNumber();
		schoolNumberKim.PrintSchoolNumber();
		schoolNumberLee.PrintSchoolNumber();
		schoolNumberPark.PrintSchoolNumber();

	} // end of main

} // end of class
송의 학번은20230001입니다.
신의 학번은20230002입니다.
김의 학번은20230003입니다.
이의 학번은20230004입니다.
박의 학번은20230005입니다.

<계산기>

package com.tencoding.starcraft;

public class Calculator {
	
	// 멤버 변수
	int sum = 0;
	
	// 두 정수를 더하는 static 메서드 만들기
	public static int add(int a, int b) {
		// 멤버 변수를 활용할 수 없는 이유는 뭘까?
		// sum = a+ b;
		return a + b;
	}

	// 두 정수를 빼는 static 메서드
	public static int subtract(int a, int b) {
		return a - b;
	}

	// 두 정수를 곱하는 static 메서드
	public static int muliply(int a, int b) {
		return a * b;
	}

	// 두 정수를 나누는 static 메서드
	public static int divide(int a, int b) {
		if (b == 0) {
			System.out.println("ERROR : Division by zero is not allowed.");
			return 0;
		}
		return a / b;
	}

	// 잠시 자리를 빌려서 static 함수를 작성할 수 있다.
	public static void main(String[] args) {

	}

} // end of class
package com.tencoding.starcraft;

public class CalculatorMainTest {

	public static void main(String[] args) {

		// 과제 - Calculator를 인스턴스화 시키지 말고
		// 동작들을 실행시켜서 확인해 보세요
		// 단 클래스 이름으로 접근해주세요
		int result1 = Calculator.add(2, 2);
		System.out.println(result1);
		int result2 = Calculator.muliply(4, 3);
		System.out.println(result2);
		int result3 = Calculator.divide(10, 0);
		System.out.println(result3);

	} // end of main

} // end of class
4
12
ERROR : Division by zero is not allowed.
0

 

728x90

'Example' 카테고리의 다른 글

[E-Java] This 예시  (30) 2024.02.23
[E-Java] 연산자 예시  (23) 2024.02.23
[E-Java] 싱글톤 패턴 예시  (20) 2024.02.23
[E-JS] 반복문, 조건문, 배열 연습  (0) 2023.08.18
[E-HTML&CSS] 애니메이션 예시  (22) 2023.08.16