java 객체지향 개념1 헷갈리는거
현재 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메서드에 출력을 시킬려고하면 오류가 나게 되는것을 볼 수 있다.