JAVA

java 객체지향 개념1 헷갈리는거

승현0604 2023. 3. 14. 13:28

현재 Kosta에서 하고있는 JAVA과정을 이수하고있는데 헷갈리는부분이 있어서 기록해본다

 

1. 인스턴스화...? 이게 은근헷갈려서 다시 개념부터 차근차근봤다

 

인스턴스란?    -----> 클래스 안에서 객체를 정의해놓고 객체는 사물이나 다름없는 존재이다. 그 객체가 인스턴스를 포함하는 일반적인 의미이다

 

예시  책상은 인스턴스다  책상은 책상 클래스의 인스턴스이다  =;  책상은 객체다 책상은 책상클래스의 객체이다.

결국 인스턴스화는 클래스로부터 인스턴스를(객체를 생성)하는것이라고 보면된다. 

 

TV클래스가 있으면 안에 변수 : 색깔, 전원, 채널 기능 메서드 : 전원 onoff, 채널 높이기 낮추기 같은 객체들이 존재를 한다고 가정해보자 

그러면 그 객체(인스턴스)를 생성하고(인스턴스화를 하고) 각 기능들을 사용해보면 다음과 같은 코드가 생성이된다. 

class TV{
	String color;
	String name;
	int channel;
	int volume;
	void channelup(){
		channel++;
	}
	void volumeup() {
		volume++;
	}
}

public class Ex6_1 {
	public static void main (String[] args) {
		TV t = new TV();
		t.channel = 7;
		t.color = "빨간색";
		t.channelup();
		System.out.println(t.channel); // 8
	}
}

  2. 인스턴변수랑 클래스변수 

 

객체지향2하면서 이러한 변수에 대한개념들이 정말 크게와닿는게 느껴졋음;;

 

인스턴스 변수 --- > 클래스 영역에 있는애들 인스턴스 생성을 해야하고 참조변수로 접근을 해야한다

클래스 변수   -----> 클래스 영역에 있는애들 인스턴스 생성없이 클래스이름. 클래스변수명으로 접근

지역변수 ---> 메서드 영역에서 ㅇ생성되는애들이다 조건문이나 반복문안에 선언된 지역변수는 없어진다!!!!!

 

이걸 몰라서... 뒤에서 고생했다.. 지금이라도 확실히..!

 

메서드도 마찬가지로 각각의 인스턴스 메서드, 클래스 메서드가 또 있는데 앞에서 얘기했듯이 메서드는 기능이다. 

인스턴스메서드는 인스턴스 생성 후에 참조변수메서드이름으로 호출을 시키는것이다.   

 

class MyMath{
	long a, b;
	long add() {
		return a + b;
	}
	
	long add(long a, long b) {
		return a+ b;
	}
}
public class Ex6_3 {

	public static void main(String[] args) {
		MyMath e = new MyMath();
		System.out.println(e.add(100L,200L)); // 클래스 메서드를 호출
		
	}

}

 근데 여기서 또 모르는게생긴다;;   

 

클래스변수나 클래스메서드에는 static이 붙는데 이 의미는 정확히 무엇인가..?

 

3. static을 사용하는 경우                   

 

클래스 안에는 여러 객체가 존재를 하는데 어떠한 구분으로 인해 서로 다른 객체가 되지만 객체와 인스턴스에 관계없이 클래스 공통으로 제어를 하고 싶을 때 넣는 부가적 기능이라고 생각하면 된다.

static제어자는 멤버 변수 즉 클래스 변수, 메서드, 그리고 초기화 블럭에 적용될 수 있다.

class Foo{
	public static String classVar = "I class var";
	
	public String instanceVar = "I stance var";
	
	public static void classmethod() {
		System.out.println(classVar);
		System.out.println(instanceVar);
	}
	public void instanceMethod() {
		System.out.println(classVar);
		System.out.println(instanceVar);
	}
}
public class Ex6_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

  다음과 같이 보면 static을 사용하지 않은 변수를 static메서드에 출력을 시킬려고하면 오류가 나게 되는것을 볼 수 있다.