본문 바로가기

카테고리 없음

자바 개인공부

# 자바 개인공부

- 초기화

메소드 영역 에서는 반드시 초기화를 해줘야 한다.

클래스 영역에서는 컴파일러가 자동으로 값을 할당해 준다.

하지만 메소드 영역에서는 값이 자동으로 할당되지 않기 때문에 에러가 발생한다.

즉 메소드 영역 에서는 반드시 초기화를 해줘야 한다.

public class InitializationTest {
	int a; // int, String, Boolean 선언
	String b;
	Boolean c;
	
	public static void main(String[] args) {
		InitializationTest it = new InitializationTest(); // 객체화
		System.out.println(it.a);
		System.out.println(it.b);
		System.out.println(it.c);
	}

}

- 변수 명칭

클래스 영역에 정의한 변수는 전역번수, 멤버변수 라고 부르고

메소드 안에 정의한 변수는 지역변수라고 부른다.

그리고 필드는 전역변수에 정의한 변수를 의미한다.

- 변수 스코프(범위)

변수 스코프란 변수를 사용할 수 있는 범위를 의미한다.

위에 변수 명칭에서도 전역변수, 지역변수 등으로 나뉘듯이 스콥이 존재한다.

변수의 스콥은 { }안에 변수를 선언했을경우 영역이 끝나기 전까지는 { }범위안 어디서든 사용이 가능하다.

메소드는 static 타입이 아니면 바로 호출이 불가능 하기 때문에 객체화를 한 뒤에 불러 올 수 있다.

객체화 방법은 클래스명참조명= new 클래스(); 이다.

아래 코드를 보면 이해가 쉽다.

package test;

public class ScopeTest { // Class 영역
	String sClassVal = "Class Value"; // Class 영역에 선언한 변수(Global Variable)
	static String sStaticVal = "Static Value"; // 스태틱은 클래스 내에서 공유되어 아무데서나 사용 가능
	
	public void method1() { // 메소드 영역
		String sMethod1Val = "method1 Value"; // Method 영역에 선언한 변수(Local Variable)
		System.out.println(sClassVal); // Class 영역 안에 있는 메소드에서는 클래스 변수 사용 가능
	} // 메소드 영역

	public static void main(String[] args) {
		// 메인 메소드는 static 변수가 아닐 경우 객체화해야 클래스 변수 사용 가능
		System.out.println(sStaticVal); 
		ScopeTest s = new ScopeTest();
		System.out.println(s.sClassVal);
	}

} // Class 영역 끝

- 객체화(인스턴스화)

객체화는 간단하게 말하면 객체타입으로 변수를 선언한 뒤 클래스 내용을 해당 변수에 담는다고 이해하면 쉽다.

자바에서 가장 중요한 개념이 객체화 이므로 해당 개념을 반드시 숙지하고 넘어가야 한다.

아래 코드를 보면서 설명을 하면 좀 더 쉽다.

public class ObjectTest {
	int i = 10;
	public static void main(String[] args) {
		ObjectTest ot; // ObjectTest 타입의 ot 선언
		ot = new ObjectTest(); // ot 안에 ObjectTest Class 넣어주기
		System.out.println(ot.i);
	}
}

만약 위의 코드에서 ot = new ObjectTest(); 이런식으로 객체화를 하지 않으면 System.out.println(ot.i); 해당 값을 출력 할 수 없다. 클래스는 메소드와 변수를 모아놓은 도화지 같은 존재이다. 그렇게 때문에 public으로 선언되지 않은 클래스에 선언된 전역변수 값을 가져오기 위해서는 객체화를 해야한다.

객체화를 한 뒤 메소드를 호출하면서 보내는것은 파라미터라고하고, 메소드에서 받아온 걸로 정의해서 사용하는 것은 아규먼트라고 해야하나 보통은 파라미터라고 한다.

리턴 부분은 반환형을 void로 하지않은 이상에야 모든 메소드에는 return이 반드시 필요하다.

뭔가를 넣어서 test_method를 호출하고 메소드 안에서 뭔가를 또 한다음에 String 형태의 값을 리턴 시키면 호출한 결과를 리턴으로 가져오면서 메소드가 끝난다.

그리고 정의한 반환형과 리턴시 반환값은 반드시 똑같은 데이터 타입이어야 한다.