Java (또는 다른 객체 지향 언어)가 작동하는 방식을 이해하지 못한다고 말할 수 있습니다.
개체 지향 언어에서 클래스는 전체 프로그램에서 필요할 수있는 여러 가지 유형의 것을 나타냅니다. 예를 들어 이것을 사용하는 것이 좋습니다. 프로그램에서 자동차를 모델링한다고 가정 해 봅시다.
당신은 Car 클래스를 가질 것이고, 당신이 필요로하는 각각의 새 차를 표현하기 위해 Car 클래스의 새로운 객체 (새로운 인스턴스)를 생성 할 것입니다. 자동차 자체는 서로 다른 구성 요소로 구성됩니다. 바퀴, 모터, 창 등이 있습니다. 따라서 이러한 각 구성 요소에 대한 클래스가 있으며 각 자동차 객체에는 모든 다른 클래스의 객체 세트가 포함됩니다. 예 :
Car1 {
motor1
window1.1, window1.2
wheel1.1,wheel1.2
}
Car2 {
motor2
window2.1, window2.2
wheel2.1,wheel2.2
}
이 경우 각 자동차 구성 요소를 클래스 필드로 정의합니다. 이 필드는 해당 클래스의 모든 메소드에서 액세스 할 수 있다는 점에서 모든 효과 '전역'에 대한 것입니다. 누락 된 것처럼 보이는 세부 사항은이 클래스의 각 새 객체가 고유 한 필드 및 메소드 세트를 갖고 있다는 것입니다. 그들은 그것들을 공유하지 않기 때문에 각 모터, 휠 세트 등은 Car 클래스의 한 인스턴스에 속합니다. 따라서 car 클래스에서 deleteWindows()라고하는 메서드를 사용하면 모든 창을 제거하고 car2에서 해당 메서드를 호출하면 car1의 창을 삭제하지 않습니다.
또 다른 중요한 세부 정보는 여러 변수를 '접두어'로 정의 할 수 있다는 것입니다 (메소드도 있음). 첫째로 당신은 공공 및 사적 (보호 받는다, 그러나 나는 그것에 들어가지 않을 것이다)을 가지고있다. 변수를 private로 선언하면 해당 변수에 액세스하고 변경할 수있는 유일한 객체가 해당 변수를 소유하고 있다는 것입니다. 반면에 public 변수는 다른 객체에 의해 액세스되고 변경 될 수 있습니다. 그것들은 접근 가능하지만 명시 적으로 객체의 변수를 변경하고 싶다고 말하면됩니다 (objectsName.variable을 작성합니다, 우리의 경우 car1.motor에 있음).
클래스의 모든 인스턴스에서 공유하는 변수/메소드를 가질 수도 있습니다. 이렇게하려면 정적으로 선언하십시오 (클래스에 실제로 속하며 특히 클래스의 어떤 객체에도 속하지 않습니다). 개인/공용은 여전히 적용되지만 개인 정적 변수는 해당 클래스의 인스턴스 (그리고 같은 클래스의 정적 메서드)에서만 액세스 할 수있는 반면 공용 변수는 다른 클래스/개체에서 액세스 할 수 있습니다. 자신이 속한 클래스 외부에서 액세스하려면 ClassName.variable/method를 사용합니다 (앞의 예제에서 Car.variable).
경우에 따라 인스턴스를 만드는 데 의미가없는 클래스가 필요할 수 있습니다. 나는 종종 전체 프로그램에서 사용하고자하는 수학 연산자가 포함 된 Math 클래스를 만들어야한다고 생각한다. Maths 객체를 만드는 것은 의미가 없기 때문에 모든 메서드를 'public static'으로 정의하고 다른 클래스에서 필요할 때마다 액세스 할 수 있습니다.
나는 의심의 여지가 있기를 바랍니다. 어쨌든 나는 당신이 객체 지향 프로그래밍에 대해 약간의 독서를 할 것을 제안 할 것이다. 아마도 객체 지향 (OO)에 중점을 둔 자바를 가르치는 책을 얻을 것이다. 이해하기 어려운 개념은 아니지만, 어렵다. 비 OO 배경에서 나온 경우 OO 언어로 올바르게 프로그래밍하는 데 익숙합니다.
BlueJ를 살펴볼 수 있습니다. 기본적으로 OO 프로그래밍을 이해하고 사용하도록하는 Java IDE입니다. 너무 오랫동안 사용하라고 제안하는 것이 아니지만 OO 기본 사항을 잘 이해할 때까지 시작하는 것이 좋습니다.
Zepee
정적 필드와 비 정적 필드의 차이점을 알고 있으며 각 개체의 상태가 고유하다는 것을 알고 있습니다. 그렇지 않으면 내가 말하게한다. 기본적으로 많은 함수 인 C 코드의 2000 줄이 있다고 가정 해 보겠습니다.이 함수에서 사용할 전역 변수를이 파일에 포함시키는 것이 좋습니다. 내가 아는 바로는, 대답은 아니오입니다 (각 함수가 어떤 함수를 쓰거나 읽는지 모르기 때문입니다). 같은 클래스에서 발생합니다, 클래스는 2000 클래스의 코드를 가질 수 있습니다,이 클래스 범위에서 전역 변수와 같습니다. 맞습니까?C 코드 예제와 같은 것은 나쁜 것입니까? –
OO 언어 이외의 많은 경험이 없지만, 당신이 가리키는 이슈, 공공 변수에 적용되는 것을 변경하는 것을 모르는 사실 등으로 보입니다. 변수에 직접 액세스하고 변경할 수있는 개체가 무엇인지 걱정해야합니다. 이것은 OOP, 캡슐화의 기본 원칙 중 하나입니다. 객체/클래스는 다른 모든 것들이 무엇인지 알 수 있어야하지만, 어떻게해야 하는지를 알 수 있습니다. 따라서 필드를 비공개로 만들고 getter/setter를 제공하는 일반적인 관행은 각 객체가 외부 세계에 대한 투명성을 제어 할 수있는 경우에만 해당합니다. – Zepee
그러나 각 클래스 안에는 완전한 투명성이 필요합니다. 네가 어떻게 생겼는지조차 알지 못한다면 네가 존재 한다는게 얼마나 좋은거야? 즉, 클래스 변수가 없으면 객체 A와 객체 B를 어떻게 구별 할 수 있습니까? 개체에 필드에 액세스하는 메서드가 여러 개 있고 필드에 액세스하는 다른 개체 만 있으면 걱정할 필요가 없습니다. 클래스 변수는 필요하기 때문에 나쁘지 않을뿐만 아니라 객체를 정의하는 것이므로 클래스의 여러 인스턴스를 각각 고유 한 속성 집합으로 가질 수 있기 때문에 OO 언어가 처음 생성 된 이유입니다. – Zepee