OOP 기초: 클래스란 무엇인가? 자바 예제

4258 단어 javaoop
클래스의 의미를 이해하는 것은 아마도 객체 지향 프로그래밍에 뛰어들 때 취해야 할 첫 번째 단계일 것입니다.

이 기사에서는 Java로 작성된 매우 기본적인 예제를 사용하여 클래스, 객체, 메소드 및 변수의 개념을 설명합니다.

다음 문장을 생각해 봅시다.

a dog called Muffin is barking.



우리는 다음을 알고 있습니다.
  • 개가 있다, 우리의 "배우"
  • 강아지 이름은 머핀
  • 개가 작업을 수행 중입니다: 짖는 소리

  • 개체 지향 프로그래밍을 사용하여 코드 측면에서 이전 시나리오를 설명할 수 있습니다.

    우리가 했던 것처럼 시나리오를 액터와 액션으로 나누면 클래스와 클래스 메서드의 의미를 더 잘 이해할 수 있습니다.
    우리는 일반적으로 클래스를 액터로 참조할 수 있으며 메서드는 일종의 동작을 설명합니다. 마지막으로 변수는 우리 액터에게 "속해 있는"것으로 볼 수 있습니다.

    이제 액터에서 시작하여 이전에 본 것을 단계별로 코드로 변환해 보겠습니다.

    public class Dog {
    }
    


    방금 Dog라는 클래스를 만들었습니다.
    우리는 개가 이름을 가질 수 있도록 할 것입니다.

    public class Dog {
        private String name;
    }
    


    마지막으로, 우리 개는 짖을 것입니다:

    public class Dog {
        private String name;
    
        public static void bark() {
            System.out.println("bau bau");
        }
    }
    


    우리는 아직 끝나지 않았습니다! 문제는 우리가 지금까지 한 것은 실제 강아지를 위한 청사진을 설계한 것뿐이지 실제로 강아지를 만들지는 않았다는 것입니다.
    그리고 여기에 Object라는 개념이 있습니다. 객체는 클래스 인스턴스입니다. 이 예에서는 자신의 이름으로 "살아나는"개입니다.

    다음 코드 블록을 고려하고 기본 메서드 내부의 콘텐츠에만 집중하려고 합니다(지금은 모든 이상한 키워드public static void String[] args 에 대해 걱정하지 마십시오).

    public class Dog {
        private String name;
    
        public static void bark() {
            System.out.println("bau bau");
        }
    
        public static void main(String[] args) {
            Dog muffin = new Dog();
            muffin.name = "Muffin";
            System.out.println(muffin.name);
            Dog.bark();
        }
    }
    


    메인 메서드 내에서 Muffin이라는 개를 살아나게 만들었습니다.
    우리는 new Dog()를 생성하고 그의 인스턴스 변수name에 Muffin이라는 이름을 할당했습니다.Dog.bark()는 어떻습니까? 개 이름을 인쇄하기 위해 클래스 인스턴스muffin를 사용하고 대신 클래스 키워드Dog(즉, 청사진)를 사용하여 개가 짖도록 만든 이유가 궁금할 수 있습니다.
    공정한 질문입니다! bark() 메서드를 정적 메서드로 선언했기 때문입니다! 그리고 그 이유는 모든 개가 짖기 때문입니다. 짖는 것은 이름이나 품종과 같은 다른 속성에 의존하는 것이 아닙니다. 즉, 특정 개 인스턴스에 의존하지 않습니다.

    이제 Dog 클래스에 새greet() 메서드를 추가해 보겠습니다.

    public class Dog {
        private String name;
    
        public static void bark() {
            System.out.println("bau bau");
        }
    
        public void greet() {
            System.out.println("Hello, my name is " + this.name + " and I am a talking dog." );
        }
    
        public static void main(String[] args) {
            Dog muffin = new Dog();
            muffin.name = "Muffin";
            System.out.println(muffin.name);
            Dog.bark();
            muffin.greet();
        }
    }
    


    보시다시피 마지막 줄에서 인스턴스muffin를 사용하여 인스턴스 메서드greet()를 호출합니다. 왜 그런 겁니까? 모든 (말하는) 개는 이름에 따라 다르게 인사하기 때문입니다. 해당 메서드를 정적으로 만들려고 하면 Dog.this가 Dog의 인스턴스를 참조하므로 정적 컨텍스트에서 this를 참조할 수 없다는 컴파일 오류가 발생합니다.

    마지막 한가지...

    한 줄에 특정 이름을 가진 Dog를 인스턴스화하는 생성자를 도입할 수 있습니다. 그것은 우리의 생성자가 될 것입니다:

        public Dog(String name) {
            this.name = name;
        }
    


    기본적으로 인스턴스를 생성할 때 관련 인스턴스 변수에 자동으로 할당하기 위해 매개변수를 도입하고 있습니다.

    전체 코드는 다음과 같습니다.

    public class Dog {
        private String name;
    
        public Dog(String name) {
            this.name = name;
        }
    
        public static void bark() {
            System.out.println("bau bau");
        }
    
        public void greet() {
            System.out.println("Hello, my name is " + this.name + " and I am a talking dog." );
        }
    
        public static void main(String[] args) {
            Dog muffin = new Dog("Muffin");
            System.out.println(muffin.name);
            Dog.bark();
            muffin.greet();
        }
    }
    


    이름은 이제 생성자를 통해 인스턴스에 직접 할당되어 이름을 인수로 전달합니다.
    코드의 출력은 다음과 같습니다.

    Muffin
    bau bau
    Hello, my name is Muffin and I am a talking dog.
    


    그것은 객체 지향 프로그래밍의 세계에 대한 우리의 첫 다이빙이었습니다.

    기본 OOP 개념을 이해하는 데 이 예제가 유용하다고 생각되면 알려주세요. 어떤 피드백도 환영합니다. 아래에 의견을 남겨주세요!

    행복한 코딩

    좋은 웹페이지 즐겨찾기