Java에서 생성자란 무엇이며 어떻게 사용합니까?

Java에서 생성자란 무엇이며 어떻게 사용합니까?

객체 지향 프로그래밍에서 생성자는 객체를 생성하기 위해 호출하는 특수 함수입니다. 생성자는 작업을 가능하게 하는 몇 가지 고유한 기능을 가지고 있습니다.





Java에서는 클래스 이름을 따서 생성자의 이름을 지정합니다. 생성자는 적용되는 클래스에 정의된 메서드입니다. Java 생성자는 오버로딩을 사용하여 대체 동작을 제공할 수 있습니다. Java의 생성자는 상속을 사용하여 코드를 재사용할 수도 있습니다.





어쨌든 생성자가 필요한 이유는 무엇입니까?

생성자는 객체 지향 프로그래밍의 핵심이며 Java도 예외는 아닙니다. 이 예제에서는 하나의 데이터 속성과 하나의 메서드를 사용하여 기본 Circle 클래스를 정의하는 방법을 보여줍니다.





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

그런 다음 이 클래스의 인스턴스를 만들고 상호 작용할 수 있습니다.

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

그러나 이것은 가능한 것보다 덜 편리하고 강력합니다. 데이터를 캡슐화하여 무단 액세스로부터 보호하는 것은 좋은 객체 지향 방식입니다.



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

이제 호출 코드는 다음을 사용할 수 있습니다. setRadius 구현 세부 정보에 대해 걱정할 필요가 없습니다.

안드로이드에서 엑스박스 원으로 캐스트
Circle c = new Circle();
c.setRadius(2);

생성자는 객체를 생성할 때 객체에 데이터를 제공하는 훨씬 더 나은 방법을 제공합니다. 그것들은 다음과 같은 속성의 초기화에 매우 자주 사용됩니다. 반지름 여기.





단순 생성자의 예

가장 기본적인 생성자는 아무 것도 하지 않는 인수가 없는 생성자입니다.

public class Circle {
public Circle() {}
}

또한보십시오: Java에서 클래스를 만드는 방법 알아보기





생성자를 정의하지 않으면 Java는 동일한 방식으로 작동하는 기본 생성자를 제공합니다.

몇 가지 사항에 유의하십시오.

  1. 생성자의 이름은 클래스 이름과 일치합니다.
  2. 이 생성자는 다음을 사용합니다. 공공의 액세스 수정자이므로 다른 코드에서 호출할 수 있습니다.
  3. 생성자는 반환 유형을 포함하지 않습니다. 다른 메서드와 달리 생성자는 값을 반환할 수 없습니다.

생성자는 일반적으로 일종의 초기화를 수행합니다. 위의 코드는 반경 값을 초기화하지 않습니다. 이 경우 언어는 자동으로 0으로 설정합니다. 이 클래스는 사용자가 사용할 것으로 예상합니다. setRadius() . 0보다 더 유용한 기본값을 사용하려면 생성자 내에서 할당할 수 있습니다.

public class Circle {
public Circle() { radius = 1; }
}

이 클래스로 만든 서클에는 이제 최소한 실제 영역이 있습니다! 발신자는 계속 사용할 수 있습니다. setRadius() 1 이외의 반경을 제공합니다. 그러나 생성자는 더 친숙할 수 있습니다.

public class Circle {
public Circle(double r) { radius = r; }
}

이제 태어날 때부터 특정 반경을 가진 원을 만들 수 있습니다.

Xbox One에서 음성 해설을 끄는 방법
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

이것은 생성자의 매우 일반적인 용도입니다. 변수를 매개변수 값으로 초기화하는 데 자주 사용합니다.

생성자 오버로딩

클래스 정의에서 둘 이상의 생성자를 지정할 수 있습니다.

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

이렇게 하면 호출 코드에 객체를 구성하는 방법을 선택할 수 있습니다.

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

약간 더 복잡한 Circle을 사용하면 더 흥미로운 생성자를 탐색할 수 있습니다. 이 버전은 위치를 저장합니다.

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

이제 인수, 단일 반경 또는 반경을 따라 x 및 y 좌표가 없는 원을 만들 수 있습니다. 이것은 Java가 모든 메소드에 대해 지원하는 동일한 종류의 오버로딩입니다.

생성자 연결

다른 하나를 기반으로 하나의 서클을 만드는 것은 어떻습니까? 이렇게 하면 서클을 쉽게 복사할 수 있습니다. 다음 블록을 관찰하십시오.

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

이것은 작동하지만 불필요하게 일부 코드를 반복합니다. Circle 클래스에는 개별 속성을 처리하는 생성자가 이미 있으므로 대신 다음을 사용하여 호출할 수 있습니다. 이것 예어:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

이것은 하나의 생성자를 다른 생성자에서 호출하는 생성자 연결의 한 형태입니다. 코드를 덜 사용하고 작업을 복제하는 대신 중앙 집중화하는 데 도움이 됩니다.

부모 생성자 호출

생성자 연결의 다른 형태는 생성자가 부모 클래스의 생성자를 호출할 때 발생합니다. 이것은 명시적이거나 암시적일 수 있습니다. 부모 생성자를 명시적으로 호출하려면 다음을 사용하십시오. 감독자 예어:

super(x, y);

Circle의 부모 역할을 하는 Shape 클래스를 상상해 보세요.

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

모든 모양이 공유하는 기능이므로 모든 모양에 대한 공통 위치 지정을 처리합니다. 이제 Circle 클래스는 부모에게 위치 처리를 위임할 수 있습니다.

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

슈퍼 클래스 구성은 매우 중요한 측면입니다. 자바의 상속 . 명시적으로 호출하지 않으면 언어가 기본적으로 이를 적용합니다. 감독자 생성자에서.

생성자의 접근 수정자

생성자는 서명에 액세스 수정자를 포함할 수 있습니다. 다른 메서드와 마찬가지로 이것은 생성자에 액세스할 수 있는 호출자의 유형을 정의합니다.

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

이것은 더 복잡한 예이므로 주의해서 이해하십시오.

  • 클래스는 추상이 아니므로 인스턴스화할 수 있습니다.
  • 생성자는 private이므로 이 클래스 자체만 새 인스턴스를 만들 수 있습니다.
  • 정적 속성과 메서드를 통해 클래스는 호출자에게 자신의 고유한 단일 인스턴스를 노출합니다.

Java에서 생성자를 사용하여 객체 생성

생성자는 객체 지향 프로그래밍에 필수적입니다. 그것들을 사용하면 필수적인 개체를 만들 수 있습니다!

Java에서 생성자는 다른 메소드처럼 보이고 거의 동일한 방식으로 작동합니다. 기본 생성자, 오버로딩 및 생성자 연결에 대한 특별한 규칙을 기억해야 합니다. 생성자가 처음인 경우 시작할 때 배워야 하는 다른 핵심 Java 개념에 대해 읽어볼 수 있습니다.

공유하다 공유하다 트위터 이메일 시작할 때 배워야 하는 10가지 핵심 Java 개념

GUI를 작성하든, 서버 측 소프트웨어를 개발하든, Android를 사용하여 모바일 애플리케이션을 개발하든 Java를 배우는 것이 도움이 될 것입니다. 다음은 시작하는 데 도움이 되는 몇 가지 핵심 Java 개념입니다.

다음 읽기
관련 항목
  • 프로그램 작성
  • 자바
  • 코딩 팁
저자 소개 바비 잭(게시된 기사 58건)

Bobby는 거의 20년 동안 소프트웨어 개발자로 일한 기술 애호가입니다. 그는 게임에 열정적이며 Switch Player Magazine에서 리뷰 편집자로 일하고 있으며 온라인 퍼블리싱 및 웹 개발의 모든 측면에 몰두하고 있습니다.

맥에서 넷플릭스를 다운로드하는 방법
바비 잭이 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.