1. 객체

Java의 모든 것은 객체입니다.

더 정확히 말하면 Java에는 객체가 아닌 것이 거의 없습니다. 예를 들어 기본 유형입니다. 그러나 이것은 규칙에 대한 다소 드문 예외입니다.

객체란 무엇입니까?

개체는 데이터를 처리하는 메서드와 함께 데이터를 그룹화하는 엔터티 입니다 . "데이터"라고 하면 물론 변수를 의미합니다.

개체의 변수를 "데이터" 또는 "상태"라고 합니다.

개체의 메서드는 개체의 "동작"이라고 합니다. 객체의 메서드만 사용하여 객체의 상태(변수)를 변경하는 것이 일반적입니다. 개체의 변수를 직접 변경하는 것(메소드를 사용하지 않음)은 잘못된 형식으로 간주됩니다.

모든 객체 와 모든 변수 에는 유형이 있습니다 . 이 유형은 개체가 생성될 때 한 번 결정되며 나중에 변경할 수 없습니다. 개체의 유형은 해당 클래스입니다.

각 개체에는 고유한 인스턴스 변수(필드) 복사본이 있습니다. 비정적 int 변수가 클래스에서 선언되고 프로그램에서 해당 클래스의 개체 10개를 생성하는 경우 각 개체는 자체 int 변수를 갖게 됩니다.

개체와 상호 작용

개체를 사용하는 가장 편리한 방법은 개체에 대한 참조를 변수에 저장한 다음 해당 변수에서 메서드를 호출하는 것입니다. 이것은 당신에게 친숙하게 보일 것입니다:

variable.method()

variable개체에 대한 참조를 저장하는 변수이며 method해당 클래스의 메서드입니다.

객체의 필드(변수)를 참조하려면 도트 연산자 도 사용해야 합니다 .

variable.field

여기서 variable는 개체에 대한 참조를 저장하는 변수이며 field인스턴스 변수(필드)입니다.


2. new연산자

특정 클래스의 객체를 생성하려면 연산자를 사용해야 합니다 new. 일반적으로 개체를 만드는 방법은 다음과 같습니다.

Class variable = new Class(arguments);

여기서 Class변수의 클래스 이름 variable과 생성할 개체의 클래스 이름이 있습니다. 그리고 variable 생성된 개체에 대한 참조를 저장하는 변수입니다. And는 arguments생성자에 전달된 인수의 쉼표로 구분된 목록에 대한 자리 표시자입니다.

전달할 수 있는 특정 인수 목록은 클래스를 작성하는 프로그래머가 결정합니다.

이전에 개체를 만들었고 이 특정 구조를 사용하기도 했습니다. 잊지 않았으면 좋겠어?

Scanner console = new Scanner(System.in);
int x = console.nextInt();

Scanner consoleconsole유형이 인 변수를 생성합니다 Scanner. — 이것은 새로운 객체를 생성합니다. 그리고 할당 연산자는 변수를 새로 생성된 개체에 대한 참조와 동일하게 설정합니다.new Scanner(System.in)Scannerconsole

nextInt()두 번째 줄에서는 개체 에 대한 참조를 저장하는 변수를 Scanner사용하여 개체에 대한 메서드를 호출합니다 .consoleScanner

개체 생성의 예:

암호 설명
String s = new String("Hello");
String개체 만들기
Scanner console = new Scanner("");
Scanner개체 만들기
int[] data = new int[10];
Create an : 요소 int[]의 컨테이너10 int

생성된 객체를 클래스의 객체 또는 클래스의 인스턴스 라고 하고 클래스를 객체의 클래스 라고 합니다 . 예를 들어 s변수는 클래스의 인스턴스에 대한 참조를 저장합니다 String.



3. 클래스 소개

다른 프로그래머가 작성한 클래스를 사용하는 것이 얼마나 편리한지 이미 보셨을 것입니다. 그러나 자신의 수업을 작성하는 것은 어떻습니까?

언제 어디서 나만의 클래스가 필요한지 어떻게 알 수 있으며 어떻게 만들 수 있습니까?

프로그래머는 일반적으로 프로그램에 새 엔터티를 가져오려고 할 때 자체 클래스를 만듭니다. 혼란스럽게 들리나요? 그럼 설명을 해보겠지만 멀리서부터 시작하겠습니다.

데이터 그룹

조금 단순화하면 Java의 객체는 클래스(인스턴스 필드)에서 선언된 변수를 포함하는 메모리 블록이라고 말할 수 있습니다. 즉, 그룹으로 결합된 변수입니다.

프로그램이 점의 좌표를 저장해야 100하고 이를 화면에 표시하는 방법이 필요하다고 가정해 보겠습니다. 이는 배열을 사용하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.

class Solution
{
   public static void printPoints(int[] x, int[] y, int[] color)
   {
     for (int i = 0; i < x.length; i++)
       System.out.println("Color of (" + x[i] + ", " + y[i] + ") = " + color[i]);
   }

   public static void main(String[] args)
   {
     int[] x = new int[100];
     int[] y = new int[100];
     int[] color = new int[100];
     printPoints(x, y, color);
   }
}

x점에 대한 모든 정보를 저장하는 단일 유형( , y, ) 이 있으면 훨씬 더 편리할 것입니다 color. 이러한 형식이 Java에 없으면 직접 만들 수 있습니다.

이를 위해 Point클래스에 대한 코드를 작성합니다.

public class Point
{
   public int x;
   public int y;
   public int color;
}

이제 위의 코드는 다음과 같이 다시 작성할 수 있습니다.

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       System.out.println("Color of (" + points[i].x + ", " + point[i].y + ") = " + points[i].color);
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Point이제 개체에 대한 정보를 표시할 메서드를 클래스에 추가해 보겠습니다 .

public class Point
{
   public int x;
   public int y;
   public int color;
   public void print()
   {
     System.out.println("Color of (" + x + ", " + y + ") = " + color);
   }
}

이제 Solution클래스는 다음과 같습니다.

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       points[i].print();
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Point포인트의 상태를 표시하는 메소드와 함께 클래스 내부에 포인트의 좌표와 색상 정보를 교묘하게 숨겼습니다 .

클래스는 프로그램 복잡성을 관리하는 방법입니다. 큰 프로그램은 많은 작은 클래스로 나눌 때 덜 복잡해집니다.


4. 변경 가능한 객체와 변경 불가능한 객체

옛날 옛적에 우리는 Java에서 상수를 연구했고 그다지 위안이 되지 않는 결론에 도달했습니다. 상수를 사용하면 변수가 변경되지 않도록 보호할 수 있지만 참조하는 개체에 대한 변경을 방지할 수는 없습니다.

이 문제를 해결하기 위해 Java는 상수 객체를 고안했습니다. 또는 불변 객체라고 더 자주 불립니다.

그건 그렇고, 객체를 변경할 수 없는 이러한 클래스를 이미 알고 있습니다. String. 객체 String는 생성된 후 영원히 변경되지 않은 상태로 유지됩니다. Java 제작자는 어떻게 이것을 달성했습니까?

첫째, String클래스의 모든 변수는 숨겨져 있습니다. 즉 선언됩니다 private.

둘째, 클래스를 상속할 수 없습니다 String. 해당 클래스 선언에는 final한정자가 포함됩니다.

셋째, 가장 흥미롭게도 String이론적으로 기존 개체를 변경할 것으로 예상되는 클래스의 모든 메서드는 실제로 개체를 변경하지 않고 대신 새 개체를 반환합니다.

예를 들어 이 toUpperCase()메서드는 문자열의 모든 문자를 대문자로 만듭니다. 그러나 메서드가 호출되는 개체를 변경하는 대신 String대문자로 구성된 새 개체를 반환합니다.

String text = "This is a very important message";
String message = text.toUpperCase();

이것은 이 코드를 실행한 후 메모리에 있는 것입니다.

변경 가능한 객체와 변경 불가능한 객체

따라서 문자열을 아무 메서드로나 자유롭게 전달하십시오. 아무도 문자열을 변경하지 않습니다.