[JAVA] chapter6 객체지향 프로그래밍 - 2

WOOK JONG KIM·2022년 9월 16일

자바의 정석

목록 보기
6/25
post-thumbnail

static & instance 메서드

같은 클래스 내 메서드멤버변수는 밀접한 관련

-> 인스턴스 메서드는 보통 인스턴스 변수와 관련된 작업 수행

메서드 중 인스턴스(인스턴스 변수 + 인스턴스 변수)와 관계가 없는 메서드

-> 보통 클래스 메서드(static메서드)로 정의

멤버변수 == 인스턴스 변수 + static 변수 통칭

static 붙이는 경우

  • 클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야 하는 것이 있는지 살펴보고, static을 붙여 준다.

  • 작성한 메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static을 붙여준다

메서드 간 호출과 참조

같은 클래스에 속한 멤버들은 인스턴스 생성 하지 않고도 호출 가능!

인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가
존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있다!!!

생성자

기본 생성자컴파일러에 의해서 추가 되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다

-> 매개변수 있는 생성자 및 매개변수가 없는 생성자를 둘다 이용하고자 한다면 기본 생성자를 꼭 코딩 해주자~

this[참조변수]와 this()[생성자]

  • 생성자에서 다른 생성자 호출 하는 경우 사용

  • 생성자 이름으로 클래스 이름 대신 this를 사용

  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능!!

  • 참조 변수로 객체 자신을 가리킴, 인스턴스 주소가 저장되어 있다.

  • static 멤버 사용 불가!

Car(String color)
{
	 door = 5;
     Car(color, "auto", 4);
 }
 
 // 이 경우 다른 생성자를 두번째 줄에서 호출하였고, this를 사용하지 않아 error
class Car2{
	String color;
    String gearType;
    int door;
    
    Car2(){
    // 인자 값이 없을 때 기본 옵션
    	this("white", "auto", 4);
    /*	color = "white"
    	gearType = "auto";
        door = 4;
    */
    }
    
    Car2(String color)
    {
    	this(color, "auto", 4);
    }
    
    Car2(String color, String gearType, int door)
    {
    	this.color = color;
        this.gearType = gearType;
        this.door = door
    }
}
Car (String color, String gearType, int door)
{// this.color -> iv, color -> lv
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}

변수의 초기화

멤버변수(클래스 변수와 인스턴스 변수)와 배열의 초기화는 기본값이 들어가지만

지역변수의 초기화는 필수!

멤버변수의 초기화

  1. 클래스 변수 초기화 이후 인스턴스 변수 초기화

  2. 자동 초기화 -> 명시적 초기화 -> 초기화 블럭, 생성자(복잡)

명시적 초기화 : 말 그대로 선언과 동시에 초기화(기본적)

class Car{
	int door = 4;
    Engine e = new Engine();
    ...
}

복잡한 초기화 작업이 필요할 때는 초기화 블럭 또는 생성자 사용

초기화 블럭

  1. 클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화
  2. 인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화
class data
{
	static {
		// 클래스 초기화 블럭 
		// 실행 되면서 data가 메모리에 로딩될 때 클래스 초기화 블럭이 가장 먼저 수행
		System.out.println("static { }");
	}
	
	{
		// 인스턴스 초기화 블럭 
		System.out.println("{ }");
	}
	
	public data() {
		System.out.println("생성자 ");
	}
	
	public static void main(String[] args)
	{
		System.out.println("EX6_14 bt = new Ex6_14();");
		 data bt = new data();
		
		System.out.println("EX6_14 bt2 = new Ex6_14();");
		data bt2 = new data();
	}
}
static { }
EX6_14 bt = new Ex6_14();
{ }
생성자 
EX6_14 bt2 = new Ex6_14();
{ }
생성자 
class data
{
	static int[] arr = new int[10];
	
	static 
	{
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int)(Math.random() * 10)+1;
		}
	
	}
	
	public static void main(String[] args)
	{
		// 클래스 초기화 블럭으로 인해 main메서드 실행 전부터 10개의 랜덤 숫자가 
		// 들어 있는 배열이 존재
		for (int i = 0; i<arr.length; i++) {
			System.out.println("arr["+i+ "]:" + arr[i]);
		}
	}
}
arr[0]:5
arr[1]:4
arr[2]:9
arr[3]:6
arr[4]:6
arr[5]:8
arr[6]:7
arr[7]:8
arr[8]:2
arr[9]:4
profile
Journey for Backend Developer

0개의 댓글