나는 마침내 교실이 무엇인지 알게 되었다

속담에 이르기를

"Each head is a whole different world."

true인 걸로 알고 있습니다.어떤 사람들은 어떤 선생님이 자신의 일을 어떻게 하는지 모른다고 말할 수도 있지만, 아마도 그가 가르치는 방식이 당신의 뇌와 연결되는 방식과 호환되지 않을 것이다.나는 이것이 그중의 하나라고 생각한다. 옳거나 그름만은 아니다.
많은 것들이 설명할 수 있는데, 이것은 가치 있는 정보의 분실을 초래할 수 있다.
그래서 오늘은 class의 생각이 저에게 미친 영향을 설명하고 싶습니다.개념뿐만 아니라 코드에서 왜 그것들이 유용한지:
우리가 프로그래밍을 시작할 때, 우리가 먼저 배운 것은 변수와 상수이다.
따라서 콘솔에서 name, ageheight을 인쇄하는 작업을 수행할 수 있습니다.
주의: 가능한 한 간단하게 class(예를 들어 Scanner)을 사용하지 않기로 결정했습니다.
// Java

public class Main {
    public static void main(String[] args) {
        String name = "Chris";
        int age = 23;
        double height = 1.85;
        System.out.println("name: " + name + ", age: " + age + ", height: " + height);
    }
}
출력:
name: Chris, age: 23, height: 1.85
위대하다
하지만 이제 변수 이름을 좀 더 묘사적으로'chris'접두사를 추가하는 게 어때요?이리 와봐:
// Java

public class Main {
    public static void main(String[] args) {
        String chrisName = "Chris";
        int chrisAge = 23;
        double chrisHeight = 1.85;
        System.out.println("chrisName: " + chrisName + ", chrisAge: " + age + ", chrisHeight: " + chrisHeight);
    }
}
좋아요!
이제 다른 사람의 정보를 추가합니다.
// Java

public class Main {
    public static void main(String[] args) {
        String chrisName = "Chris";
        int chrisAge = 23;
        double chrisHeight = 1.85;
        System.out.println("chrisName: " + chrisName + ", chrisAge: " + age + ", chrisHeight: " + chrisHeight);

        String danielName = "Daniel";
        int danielAge = 27;
        double danielHeight = 1.71;
        System.out.println("danielName: " + danielName + ", danielAge:" + danielAge + ", danielHeight:" + danielHeight)
    }
}
히드록시 메틸 멜라민 메틸 에테르...🤔
너는 하나의 패턴을 보기 시작했니?
우리는 서로 다른 두 사람에게서 같은 세 개의 값을 저장했다...
이때 class이 구조하러 왔다!

한 걸음 한 걸음 코드를 재구성해 봅시다. 매번 person만 주목하세요.

크리스 반


OOP(대상방향 프로그래밍)에서 classes은 상태와 행위를 나타내는 데 사용되며 고도의 내중성을 가진다.영어에서는 class의 변수와 방법이 서로 관련되어 있음을 의미한다.만약 방법이 class의 어떤 변수도 사용하지 않았다면, 이것은 신호일 수도 있고, 이것은 그것이 이 방법에 속하지 않는다는 것을 나타낼 수도 있다.
이제 우리는 Chris class을 만들 수 있습니다. 이것은 기본 구조 함수를 가지고 있습니다. 이 구조 함수의 값은 chrisName, chrisAgechrisHeight입니다.

A constructor is a special kind of function that must have the same name as the class it belongs to + have no return value (doesn't even need the void keyword), which is normally used to make sure that an instance of that class is in a valid state.

Valid state means that an object has the values that are expected.

An object is a concrete implementation of a class (we will see it in action later).


Chris class은 다음과 같이 보입니다.
// Java

public class Chris {
    private String name;
    private int age;
    private double height;

    public Chris(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

The keyword this is used to refer to the global scope of our class in order to differentiate the name parameter of the constructor from the actual global scope's name.


이제 우리는 우리의 코드를 재구성하여 우리의 새로운, 빛나는 Chris class을 사용할 수 있습니다!
그래서
String chrisName = "Chris";
int chrisAge = 23;
double chrisHeight = 1.85;
다음을 수행할 수 있습니다.
Chris chris = new Chris("Chris", 23, 1.85);

The keyword new is used to refer to the constructor of our Chris class.

And chris (notice the lower case "c") is what we call an object, because it is a concrete or "real" implementation of our Chris class.


그러나 우리는 더 이상 chrisName, chrisAgechrisHeight이 없기 때문에 우리의 코드는 정확하게 컴파일할 수 없을 것이다.
재미있다
우리는 이 문제를 어떻게 해결합니까?
알겠습니다. 만약에 Chris class으로 돌아가면 전역 범위의 변수(fields, private fields 또는 member variables)가 private이라는 것을 볼 수 있습니다.그래서 우리는 밖에서 그들에게 접근할 수 없다.
이를 위해 public가지 방법을 추가해서 이 데이터에 접근할 수 있도록 도와야 합니다.
// Java

public class Chris {
    private String name;
    private int age;
    private double height;

    public Chris(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getHeight() {
        return height;
    }
}

Did you notice how those get...() methods don't use the this keyword? That's because there are no parameters that can match their names, so the compiler knows that we are referring to the global scope's variables instead.


이제 우리는 이런 방법이 생겼다. 우리는 좀 사용할 수 있다(.)교환원, 이렇게:
// Java

public class Main {
    public static void main(String[] args) {
        Chris chris = new Chris("Chris", 23, 1.85);
        System.out.println("chrisName: " + chris.getName() + ", chrisAge: " + chris.getAge() + ", chrisHeight: " + chris.getHeight());

        String danielName = "Daniel";
        int danielAge = 27;
        double danielHeight = 1.71;

        System.out.println("danielName: " + danielName + ", danielAge:" + danielAge + ", danielHeight:" + danielHeight)
    }
}
이게 더 좋아요!
아니, 잠깐만...
이제 우리도 다니엘을 위해 똑같은 일을 해야 한다. 다니엘 class을 만들자.

다니엘 반


// Java

public class Daniel {
    private String name;
    private int age;
    private double height;

    public Daniel(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getHeight() {
        return height;
    }
}
현재 주요 class은 다음과 같습니다.
// Java

public class Main {
    public static void main(String[] args) {
        Chris chris = new Chris("Chris", 23, 1.85);
        System.out.println("chrisName: " + chris.getName() + ", chrisAge: " + chris.getAge() + ", chrisHeight: " + chris.getHeight());

        Daniel daniel = new Daniel("Daniel", 27, 1.71);
        System.out.println("danielName: " + daniel.getName() + ", danielAge:" + daniel.getAge() + ", danielHeight:" + daniel.getHeight())
    }
}
좋아요!
현재 우리의 주요 class은 이전보다 짧아졌다.
하지만 우리 할 일이 하나 더 있어...
만약 네가 정말 생각해 본다면, 우리는 기본적으로 Chris와 Daniel classes에서 같은 논리를 하고 있다🤔.
이것은 우리가 이 특수한 상황에 대해 정확한 추상을 사용하지 않았다는 것을 의미한다.솔루션을 찾기 위해서는 Chris와 Daniel이 무엇인지 알아야 합니다...
이게 정답이야!그들은 모두 Person이다.
따라서 Daniel class을 삭제하고 Chris class을 "Person"으로 이름 바꾸면 코드는 다음과 같습니다.
// Java

public class Main {
    public static void main(String[] args) {
        Person chris = new Person("Chris", 23, 1.85);
        System.out.println("chrisName: " + chris.getName() + ", chrisAge: " + chris.getAge() + ", chrisHeight: " + chris.getHeight());

        Person daniel = new Person("Daniel", 27, 1.71);
        System.out.println("danielName: " + daniel.getName() + ", danielAge:" + daniel.getAge() + ", danielHeight:" + daniel.getHeight())
    }
}

우리는 어떤 이익을 얻었습니까?

  • 우리의 코드는 현재 더욱 짧고 의미를 잃지 않았다.
  • 신규 classes 2 개의 요구 사항을 1 개로 줄였습니다.
  • 더 많은 곳에서 "Chris"및 "Daniel"을 반복하는 소음을 줄였습니다.
  • 우리는 class에서 우리의 논리를 중용하려고 한다.
  • 현재 우리는 chrisdaniel이 모두 같은 종류의 구체적인 실현임을 곧 알 수 있다. 또는 나는 그들을 어떻게 부르는지 좋아한다. 형제.
  • 현재 우리는 다른 프로젝트에서 이 사람을 사용할 수 있다. class은 여전히 정상적으로 일할 수 있다.
  • 마지막 말


    나는 이 예가 당신을 도울 수 있기를 바랍니다. 독자님/여사님, 당신이 어떤 종류와 왜 우리가 대상을 대상으로 프로그래밍을 할 때 그것들을 사용하는지에 대한 생각을 정리할 수 있기를 바랍니다.
    다음 댓글 만나요!

    추가 팁


    이 설명은 다음과 같습니다. 또 다른 장점은 현재 코드에서 인쇄된 Person 정보의 일부분을 Person 대상을 받아들이는 함수를 생성하여 바꿀 수 있다는 것입니다. 아래와 같습니다.
    // Java
    
    public class Main {
        public static void main(String[] args) {
            Person chris = new Person("Chris", 23, 1.85);
            printPersonalInfo(chris);
    
            Person daniel = new Person("Daniel", 27, 1.71);
            printPersonalInfo(daniel);
        }
    
        public static void printPersonalInfo(Person person) {
            System.out.println("name: " + person.getName() + ", age:" + person.getAge() + ", height:" + person.getHeight());
        }
    }
    
    이런 작은 변경을 통해 우리는 두 줄의 다른 코드를 유지할 필요가 없다는 장점을 얻을 수 있다.우리의 코드 중 한 군데만 다른 방식으로 누군가의 정보를 보여주지 않도록 변경해야 한다.
    알파가 이 질문을 해줘서 고맙소.
    지금 나는 코드에 대해 다른 조정을 해야 한다.printPersonalInfo() 함수는 Person 대상만 받아들이기 때문에 이 방법은 Person류에 직접 의존한다는 뜻이다.즉, 그것은 그것의 일부분이어야 한다!
    함수를 Person 클래스로 이동하여 Main 클래스에 연결하는 대신
    // Java
    
    public class Person {
        private String name;
        private int age;
        private double height;
    
        public Person(String name, int age, double height) {
            this.name = name;
            this.age = age;
            this.height = height;
        }
    
        // Imagine we still have the getters here :P
        // this is just to make the code block shorter.
    
        public void printInfo() {
            System.out.println("name: " + name + ", age:" + age + ", height:" + height);
        }
    }
    
    지금, 너는 내가 어쩔 수 없이 조정해야 한다는 것을 알아차렸을 것이다.
  • 매개 변수를 삭제합니다.
  • 글로벌 변수의 각 Getter 메서드 호출을 대체합니다.
  • 에서는 이 메서드를 printPersonalInfo()에서 printInfo()로 변경합니다.
  • 마지막으로 선택할 수도 있고 개인적인 취향일 수도 있다.개인적으로 말하자면, 나는 명칭 중의 '개인' 부분이 좀 쓸데없는 것을 발견했다. 왜냐하면 우리는 잠시 후에 person 대상을 만들 것을 알고 있기 때문이다.
    좋습니다. 이제 이 새로운 실현으로 Person 클래스를 조정해야 합니다.
    // Java
    
    public class Main {
        public static void main(String[] args) {
            Person chris = new Person("Chris", 23, 1.85);
            chris.printInfo();
    
            Person daniel = new Person("Daniel", 27, 1.71);
            daniel.printInfo();
        }
    }
    
    만약 네가 생각해 보면, 우리는 심지어 Getter 방법을 필요로 하지 않는다. 이런 방법은 OOP의 '봉인' 원칙과 관련이 있는데, 이것은 다른 문장의 주제이다😉.
    🎊 만약 네가 책 전체를 통독했다면, 너는 추가 포인트를 얻을 수 있을 것이다.🎉

    좋은 웹페이지 즐겨찾기