나는 마침내 교실이 무엇인지 알게 되었다
"Each head is a whole different world."
true
인 걸로 알고 있습니다.어떤 사람들은 어떤 선생님이 자신의 일을 어떻게 하는지 모른다고 말할 수도 있지만, 아마도 그가 가르치는 방식이 당신의 뇌와 연결되는 방식과 호환되지 않을 것이다.나는 이것이 그중의 하나라고 생각한다. 옳거나 그름만은 아니다.많은 것들이 설명할 수 있는데, 이것은 가치 있는 정보의 분실을 초래할 수 있다.
그래서 오늘은
class
의 생각이 저에게 미친 영향을 설명하고 싶습니다.개념뿐만 아니라 코드에서 왜 그것들이 유용한지:우리가 프로그래밍을 시작할 때, 우리가 먼저 배운 것은 변수와 상수이다.
따라서 콘솔에서
name
, age
및 height
을 인쇄하는 작업을 수행할 수 있습니다.주의: 가능한 한 간단하게
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
, chrisAge
과 chrisHeight
입니다.
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
, chrisAge
과 chrisHeight
이 없기 때문에 우리의 코드는 정확하게 컴파일할 수 없을 것이다.
재미있다
우리는 이 문제를 어떻게 해결합니까?
알겠습니다. 만약에 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())
}
}
우리는 어떤 이익을 얻었습니까?
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).
// 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
.
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
.
// 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)
}
}
// 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 개로 줄였습니다.class
에서 우리의 논리를 중용하려고 한다.chris
과 daniel
이 모두 같은 종류의 구체적인 실현임을 곧 알 수 있다. 또는 나는 그들을 어떻게 부르는지 좋아한다. 형제.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);
}
}
지금, 너는 내가 어쩔 수 없이 조정해야 한다는 것을 알아차렸을 것이다.
이 설명은 다음과 같습니다. 또 다른 장점은 현재 코드에서 인쇄된
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);
}
}
지금, 너는 내가 어쩔 수 없이 조정해야 한다는 것을 알아차렸을 것이다.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의 '봉인' 원칙과 관련이 있는데, 이것은 다른 문장의 주제이다😉.🎊 만약 네가 책 전체를 통독했다면, 너는 추가 포인트를 얻을 수 있을 것이다.🎉
Reference
이 문제에 관하여(나는 마침내 교실이 무엇인지 알게 되었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chrisvasqm/how-i-finally-understood-what-a-class-is--24pl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)