728x90

728x90
반응형
728x90

 

JAVA method - 9. 부록 - static

public에 이어 바로 옆에 붙어나오는 static을 알아보자

(이해가 어려우니 추후 객체지향 수업에서 또 다룰 것임)

    static - class method
 no static - instance method

스태틱이라는 키워드가 붙은 메소드는 클래스의 메소드

스태틱이 없는 메소드는 인스턴스의 메소드

 

 

// JAVA method - 9. 부록 - static
//
// static

// 	  static - class method	
// no static - instance method
// 스태틱이라는 키워드가 붙은 메소드는 클래의 메소드다
// 스태틱이 없는 메소드는 인스턴스의 메소드다
	
	
// void 의미 : 리턴값이 없다
// 비슷한 성격의 메소드를 정리정돈하는 도구 : 클래스

class Print{
	public String delimiter; // static 안씀. 바로 아래 a,b()메소드 ()안에 값도 삭제하고,
							 // println()안 값도 String delimiter → this.delimiter로 수정
//	public static void a(String delimiter) { 
//  	System.out.println(delimiter); 
	public void a() { 
		System.out.println(this.delimiter);  // 이 this.delimiter는 아래 t1.delimiter = "----";의값
		System.out.println("a");
		System.out.println("a");
	}
//	public static void b(String delimiter) {
//		System.out.println(delimiter); 
	public void b() {						 // 메소드가 인스턴스 소속일 때는 static 제거해야함
		System.out.println(this.delimiter);
		System.out.println("b");
		System.out.println("b");
	}
	public static void c(String delimiter) { // static 추가
		System.out.println(delimiter);		 
		System.out.println("c");
		System.out.println("c");
	}
}

public class method09 {

	
	public static void main(String[] args) {

	
//		a("----"); // a,b메소드 둘 다 클래스 Print로 묶고, Print.을 붙여줘서 경로지정
//		b("===="); // 경로 변경으로 인한 에러 해결
		
//		Print.a("----"); // 이 코드가 1억줄이라면, 구분자를 변경해야할 때마다 곤욕...
//		Print.b("----"); // 이를 위해 아래처럼 인스턴스를 사용한다
		
								// 데이터타입이 Print클래스인 변수 t1이고,
		Print t1 = new Print(); // Print 클래스 복제. 인스턴스 : new Print()
		t1.delimiter = "----";  // Print의 인스턴스 t1은 내부적으로 구분자의 값이 ----가 됨
		t1.a();					// 좌측처럼 구분자를 추가하지 않아도 자동적용됨
		t1.b();					// 위의 Print.b("----");는 각 메소드마다 구분자를 정해준 것이고,
								// 인스턴스를 사용한 이녀석은 메소드마다 지정안해줘도 된다
		
//		Print.a("====");		// 클래스 Print 소속으로 실행됨
//		Print.b("====");
		
		Print t2 = new Print(); // t1처럼 같은 클래스를 복제한 것 뿐인데, 왜 에러뜨고 작동하지 않을까?
		t2.delimiter = "====";  // static의 유무에 따라 에러 on&off
		t2.a();					// 이 a()메소드는 t2 '인스턴스 소속'으로 실행됨
		t2.b();					// Print.a("====");의 a는 '클래스 Print 소속'으로 실행됨
		
								// 메소드가 인스턴스 소속일 때는 static을 빼줘야함
								// 메소드가 클래스 소속일 때는 static이 있어야함
		// Print.a();에서 Print.은 클래스이고 이렇게 실행하면 작동이 안되고 에러
		// a()라는 메소드는 클래스 소속이 아니고 인스턴스 소속이기 때문에 에러. static이 없기에 작동x
		// Print.a();를 작동시킬려면 static을 넣으면 클래스를 쓸 수 있다. 
		
		Print.c("++++");		// 클래스 소속 메소드로써 잘 작동
								// static을 위에서 추가시켜뒀기 때문
	}
}

 

  • static - class method

mesod_try.c("@@@@"); 

 

  • no static - instance method

 

mesod_try m1 = new mesod_try();
m1.delimiter = "아자아자";
m1.a();
m1.b();

 

728x90
반응형
728x90

 

JAVA method - 8. 부록 - Access level modifiers

Access level modifiers : 외부에서의 접근권한 설정

 

메소드가 많아지면, 서로 연관된 메소드를 그루핑하기 위해 클래스를 만들게 된다

만든 클래스에 연관 메소드를 안에 넣어둠

 

public 자리에 올 수 있는 다른 명령어들 : 외부에서 접근하는 레벨을 지정하는 부분

public, protected, default(생략), private(같은 클래스 안에서만 작동하게하는 기능)

 - 위의 명령어가 무엇이든 다 동작하기는 한다

 

 

아래는 public과 private의 설정 차이이다

Greeting.hi();에서 위의 클래스 Greeting 안에 hi메소드가 public이면 작동. private면 미작동 에러

class Greeting{
	**public** static void hi() { 
//	private static void hi() {
		System.out.println("Hi");
	}
}

public class method08 {
	public static void main(String[] args) {

		**Greeting**.hi(); // 위의 hi메소드가 public이면 작동. private면 미작동 에러
	}
}

 

public과 private의 예

스마트폰 안에 오만가지 선들이 있는데 이것을 사용자가 만지면 안되고 알 필요도 없음 반대로 사용자가 컨트롤 해야할 볼륨키, 전원키 등은 외부로 나와줘야한다

  • public : 외부로 노출되어 있는 버튼들(유저가 사용가능)
  • private : 내부 선들(유저 사용불가)

 

 

전체코드

// JAVA method - 8. 부록 - Access level modifiers
//
// Access level modifiers : 외부에서의 접근권한 설정

class Greeting{
	public static void hi() {
//	private static void hi() {
		System.out.println("Hi");
	}
}
public class method08 {
	public static void main(String[] args) {
	// public 자리에 올 수 있는 다른 명령어들 : 외부에서 접근하는 레벨을 지정하는 부분
	// public, protected, default(생략), private(같은 클래스 안에서만 작동하게하는 기능)
	// 위의 명령어가 무엇이든 다 동작하기는 한다
		
		Greeting.hi(); // 위의 hi메소드가 public이면 작동. private면 미작동 에러
		
		// protected & default는 경제적이지 않음
		
		// public과 private의 예
		// 스마트폰 안에 오만가지 선들이 있는데 이것을 사용자가 만지면 안되고 알 필요도 없음
		// 반대로 사용자가 컨트롤 해야할 볼륨키, 전원키 등은 외부로 나와줘야한다
		// public : 외부로 노출되어 있는 버튼들(유저가 사용가능)
		// private : 내부 선들(유저 사용불가)
	}
}
728x90
반응형
728x90


728x90
반응형
728x90

 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts