DevYoon

[Java] 객체지향 본문

언어/Java

[Java] 객체지향

gimewn 2022. 5. 11. 18:29

Java 객체지향

instance

1️⃣ 인스턴스 생성

클래스명 변수명 = new 클래스명();

2️⃣ 인스턴스 접근

  • 인스턴스에 접근하기 ➡️ 인스턴스 변수 사용해서만 가능

    class Print{
        public String delimiter = "";
        public void A(){
            ~~~~~~~
        }
    }
    
    Public class Main{
        public static void main(String[], args){
            Print p2 = new Print();
            p2.A();
        }
    }

2️⃣ static

  • 변수나 메소드 앞에 static ➡️ 클래스 소속 변수

  • static을 제거하고 인스턴스 소속으로 만들면 클래스에서 접근이 불가능

    class Foo{
        public static String classVar = "I class var";
        public String instanceVar = "I instance var";
        public static void classMethod() {
            System.out.println(classVar); // Ok
            System.out.println(instanceVar); // Error
        }
        public void instanceMethod() {
            System.out.println(classVar); // Ok
            System.out.println(instanceVar); // Ok
        }
    }
    public class StaticApp {
    
        public static void main(String[] args) {
            System.out.println(Foo.classVar); // OK
            System.out.println(Foo.instanceVar); // Error
            Foo.classMethod();
            Foo.instanceMethod(); // Error
    
            Foo f1 = new Foo();
            Foo f2 = new Foo();
    
            System.out.println(f1.classVar); // I class var
            System.out.println(f1.instanceVar); // I instance var
    
            f1.classVar = "changed by f1";
            System.out.println(Foo.classVar); // changed by f1
            System.out.println(f2.classVar);  // changed by f1
    
            f1.instanceVar = "changed by f1";
            System.out.println(f1.instanceVar); // changed by f1
            System.out.println(f2.instanceVar); // I instance var
        }
    
    }

3️⃣ 생성자와 this

  • 클래스의 이름과 동일한 메서드가 있다면 호출하는 것이 약속

  • constructor를 위의 메서드에 넣기

  • this ➡️ 변수명이 같을 때 인스턴스를 가리켜서 구분

    class Print{
        public String delimiter = "";
        public Print(String delimiter){
            this.delimiter = delimiter;
        }
    }