Java

2024.04.19 static 메소드(함수)

정훈5 2024. 4. 19. 10:12

 

학습 목표 

1. static 메소드의 개념을 알자. 
2. Method Area 와 heap 영역에 실행 시점의 이해

 

static 메서드(함수)는 특정 클래스의 인스턴스에 속하지 않고 클래스 자체에 속합니다. 따라서 객체를 생성하지 않고도 클래스 이름을 통해 직접적으로 호출할 수 있습니다. static 메서드는 클래스의 모든 인스턴스가 공유하며, 주로 유틸리티 기능이나 공통 동작을 제공하는 데 사용됩니다.

 

주요 특징 정리

  • 객체 생성 없이 호출 가능
  • 인스턴스 변수에 접근 불가
  • static 메서드는 객체의 인스턴스 변수에 직접적으로 접근할 수 없습니다. 왜냐하면 static 메서드는 객체가 생성되기 전에 호출될 수 있기 때문에 해당 객체의 상태를 알 수 없기 때문입니다.

시나리오 코드 1단계

 

package basic.ex13;

// import : 가지고 오다. 수입하다.
import java.util.Random;

public class LottoNumberMaker {
	
	// 멤버 변수
	private String version = "1.0.0";
	
	
	// main 함수 static 함수이다.
	public static void main(String[] args) {
		
		System.out.print( makeNumber() +"\t");
		System.out.print( makeNumber() +"\t");
		System.out.print( makeNumber() +"\t");
		System.out.print( makeNumber() +"\t");
		System.out.print( makeNumber() +"\t");
		System.out.print( makeNumber() +"\t");
		
	} // end of main
	
	// 인스턴스에 속하지 않는 함수 만들기
	public static int makeNumber() {
	// static 함수안에 멤버 변수를 사용할 수 없다.
	// 메모리가 뜨는 순서 !! 를 이해해야 한다. 
	// 	System.out.println("ver : " +version);
		
		
		// 자바 도구 -- 표준 API
		// 난수 발생기 --> 랜덤 번호를 생성
		// 앞 자리가 대문자 이면 참조함수 이다.
		Random random = new Random();
		int resultNumber = random.nextInt(45) + 1; // 1 ~ 45 까지 

		return resultNumber;
	}

}

 

로또 변수

 

package basic.ch12;

import basic.ex13.LottoNumberMaker;

public class LottoGame {
	
	public static void main(String[] args) {
		// static 변수 --> 클래스 변수라고도 불린다.
		int gameNumber1 = LottoNumberMaker.makeNumber();
		int gameNumber2 = LottoNumberMaker.makeNumber();
//		int gameNumber3 = LottoNumberMaker.makeNumber();
//		int gameNumber4 = LottoNumberMaker.makeNumber();
//		int gameNumber5 = LottoNumberMaker.makeNumber();
//		int gameNumber6 = LottoNumberMaker.makeNumber();
		
		System.out.print(gameNumber1 + "\t");
		System.out.print(gameNumber2 + "\t");
//		System.out.print(gameNumber3 + "\t");
//		System.out.print(gameNumber4 + "\t");
//		System.out.print(gameNumber5 + "\t");
//		System.out.print(gameNumber6 + "\t");
		
		// 오름 차순으로 정렬해 보기
		// 만약 1 상자가 2상자보다 크다면 어떤 행동을 하라
		// 단 변수에 값을 담고 출력해 보세요.
		
		
		// 예상 1box = 5
		// 예상 2box = 3
		int tempBox = 0;
		
		if(gameNumber1 > gameNumber2) {
			// 0  = 3 --> temp == 3
			// 0  =  5 --> temp == 5;
			tempBox = gameNumber1;
			// 3
			gameNumber1 = gameNumber2;
			// 5
			gameNumber2 = tempBox;
		}
		System.out.println();
		System.out.println("---------------");
		// 정렬 --> 3, 5
		System.out.println(gameNumber1);
		System.out.println(gameNumber2);

	} // end of main

} // end of class

 

 

 

 

package basic.ex13;

import basic.ex13.LottoNumberMaker;

public class LottoGame2 {

	public static void main(String[] args) {
		// static 변수 --> 클래스 변수라고도 불린다.
		int gameNumber1 = LottoNumberMaker.makeNumber();
		int gameNumber2 = LottoNumberMaker.makeNumber();
		int gameNumber3 = LottoNumberMaker.makeNumber();
		int gameNumber4 = LottoNumberMaker.makeNumber();
		int gameNumber5 = LottoNumberMaker.makeNumber();
		int gameNumber6 = LottoNumberMaker.makeNumber();

		// 전체 1~6 까지 나온 결과값을 오름 차순으로 정렬
		// 단, 중복 값 제외

		System.out.println(gameNumber1 + "\t");
		System.out.println(gameNumber2 + "\t");
		System.out.println(gameNumber3 + "\t");
		System.out.println(gameNumber4 + "\t");
		System.out.println(gameNumber5 + "\t");
		System.out.println(gameNumber6 + "\t");

		// 수식을 작성해주세요
		// 만약 if --> 반복문 사용 금지, if문 6개로 사용
		int tempBox = 0;
		// 5 1 9 7 2 3
		
		if (gameNumber1 > gameNumber2) {
			tempBox = gameNumber1;
			gameNumber1 = gameNumber2;
			gameNumber2 = tempBox;
		}

		if (gameNumber2 > gameNumber3) {
			tempBox = gameNumber2;
			gameNumber2 = gameNumber3;
			gameNumber3 = tempBox;
		}

		if (gameNumber3 > gameNumber4) {
			tempBox = gameNumber3;
			gameNumber3 = gameNumber4;
			gameNumber4 = tempBox;
		}

		if (gameNumber4 > gameNumber5) {
			tempBox = gameNumber4;
			gameNumber4 = gameNumber5;
			gameNumber5 = tempBox;
		}

		if (gameNumber5 >= gameNumber6) {
			tempBox = gameNumber5;
			gameNumber5 = gameNumber6;
			gameNumber6 = tempBox;
		}

		System.out.print(gameNumber1 + "\t");
		System.out.print(gameNumber2 + "\t");
		System.out.print(gameNumber3 + "\t");
		System.out.print(gameNumber4 + "\t");
		System.out.print(gameNumber5 + "\t");
		System.out.print(gameNumber6 + "\t");

	} // end of main

} // end of class

 

 

 

버블 정렬

 

start code

: 동작을 확인하고 이해할 수 이도록 주석으로 확이

: 잘못된 부분이 있다면 코드를 수정해주세요 !!!

 

package basic.ex13;

public class LottoGame3 {

	public static void main(String[] args) {
		 
		
		int gameNumber1 = LottoNumberMaker.makeNumber();
		int gameNumber2 = LottoNumberMaker.makeNumber();
		int gameNumber3 = LottoNumberMaker.makeNumber();
		int gameNumber4 = LottoNumberMaker.makeNumber();
		int gameNumber5 = LottoNumberMaker.makeNumber();
		int gameNumber6 = LottoNumberMaker.makeNumber();

		
		int tempBox = 0;
		// 테스트 값 :  5, 1, 9, 7, 2, 3
		  
		if(gameNumber1 > gameNumber2) {
			tempBox = gameNumber1;
			gameNumber1 = gameNumber2;
			gameNumber2 = tempBox;
		}
		if(gameNumber2 > gameNumber3) {
			tempBox = gameNumber2;
			gameNumber2 = gameNumber3;
			gameNumber3 = tempBox;
		}
		if(gameNumber3 > gameNumber4) {
			tempBox = gameNumber3;
			gameNumber3 = gameNumber4;
			gameNumber4 = tempBox;
		}
		if(gameNumber4 > gameNumber5) {
			tempBox = gameNumber4;
			gameNumber4 = gameNumber5;
			gameNumber5 = tempBox;
		}
		if(gameNumber5 > gameNumber6) {
			tempBox = gameNumber5;
			gameNumber5 = gameNumber6;
			gameNumber5 = tempBox;
		}
		
		System.out.println(gameNumber1);
		System.out.println(gameNumber2);
		System.out.println(gameNumber3);
		System.out.println(gameNumber4);
		System.out.println(gameNumber5);
		System.out.println(gameNumber6);
		
		
	} // end of main 
}

 

package basic.ex13;

import basic.ex13.LottoNumberMaker;

// 동작을 확인하고 이해할 수 이도록 주석으로 확인
// 잘못된 부분이 있다면 코드를 수정해주세요
public class LottoGame3 {

	public static void main(String[] args) {
		// static 변수 --> 클래스 변수라고도 불린다.
		int gameNumber1 = LottoNumberMaker.makeNumber();
		int gameNumber2 = LottoNumberMaker.makeNumber();
		int gameNumber3 = LottoNumberMaker.makeNumber();
		int gameNumber4 = LottoNumberMaker.makeNumber();
		int gameNumber5 = LottoNumberMaker.makeNumber();
		int gameNumber6 = LottoNumberMaker.makeNumber();

		int tempBox = 0;
		// 테스트 값 : 5, 1, 9, 7, 2, 3
for(int i =0; i<7; i++) {
		if (gameNumber1 > gameNumber2) {
			tempBox = gameNumber1;
			gameNumber1 = gameNumber2;
			gameNumber2 = tempBox;
		}
		if (gameNumber2 > gameNumber3) {
			tempBox = gameNumber2;
			gameNumber2 = gameNumber3;
			gameNumber3 = tempBox;
		}
		if (gameNumber3 > gameNumber4) {
			tempBox = gameNumber3;
			gameNumber3 = gameNumber4;
			gameNumber4 = tempBox;
		}
		if (gameNumber4 > gameNumber5) {
			tempBox = gameNumber4;
			gameNumber4 = gameNumber5;
			gameNumber5 = tempBox;
		}
		if (gameNumber5 > gameNumber6) {
			tempBox = gameNumber5;
			gameNumber5 = gameNumber6;
			gameNumber6 = tempBox;
		}
}
		System.out.println(gameNumber1);
		System.out.println(gameNumber2);
		System.out.println(gameNumber3);
		System.out.println(gameNumber4);
		System.out.println(gameNumber5);
		System.out.println(gameNumber6);

	} // end of main

} // end of class