Groovy-객체 지향
Groovy에는 다른 객체 지향 언어와 마찬가지로 프로그래밍 언어의 객체 지향 특성을 나타내는 클래스 및 객체 개념이 있습니다. Groovy 클래스는 데이터 및 해당 데이터에서 작동하는 메서드의 모음입니다. 함께 클래스의 데이터와 메서드는 문제 영역에서 실제 개체를 나타내는 데 사용됩니다.
Groovy의 클래스는 해당 클래스에 의해 정의 된 객체의 상태 (데이터)와 동작을 선언합니다. 따라서 Groovy 클래스는 해당 클래스의 인스턴스 필드와 메서드를 모두 설명합니다.
다음은 Groovy의 클래스 예입니다. 클래스 이름은 Student이며 두 개의 필드가 있습니다.StudentID 과 StudentName. 주 함수에서 우리는이 클래스의 객체를 생성하고 값을StudentID 과 StudentName 개체의.
class Student {
int StudentID;
String StudentName;
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName = "Joe"
}
}
getter 및 setter 메서드
모든 프로그래밍 언어에서 항상 private 키워드로 인스턴스 멤버를 숨기고 그에 따라 인스턴스 변수의 값을 설정하고 가져 오는 getter 및 setter 메서드를 제공하는 것이 좋습니다. 다음 예제는이를 수행하는 방법을 보여줍니다.
class Student {
private int StudentID;
private String StudentName;
void setStudentID(int pID) {
StudentID = pID;
}
void setStudentName(String pName) {
StudentName = pName;
}
int getStudentID() {
return this.StudentID;
}
String getStudentName() {
return this.StudentName;
}
static void main(String[] args) {
Student st = new Student();
st.setStudentID(1);
st.setStudentName("Joe");
println(st.getStudentID());
println(st.getStudentName());
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
1
Joe
위의 프로그램에 대한 다음 핵심 사항에 유의하십시오.
클래스에서 studentID와 studentName은 모두 비공개로 표시되어 클래스 외부에서 액세스 할 수 없습니다.
각 인스턴스 멤버에는 자체 getter 및 setter 메서드가 있습니다. getter 메서드는 인스턴스 변수의 값을 반환합니다. 예를 들어 int getStudentID () 메서드와 setter 메서드는 인스턴스 ID의 값을 설정합니다 (예 : void setStudentName (String pName)).
인스턴스 방법
실제로 클래스에 대해 일종의 기능을 수행하는 클래스 내부에 더 많은 메서드를 포함하는 것은 일반적으로 자연스러운 일입니다. 학생 예제에서 Marks1, Marks2 및 Marks3의 인스턴스 멤버를 추가하여 3 개의 과목에서 학생의 마크를 나타냅니다. 그런 다음 학생의 총 점수를 계산하는 새 인스턴스 메서드를 추가합니다. 다음은 코드의 모습입니다.
다음 예제에서 Total 메서드는 몇 가지 논리가 내장 된 추가 인스턴스 메서드입니다.
class Student {
int StudentID;
String StudentName;
int Marks1;
int Marks2;
int Marks3;
int Total() {
return Marks1+Marks2+Marks3;
}
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName="Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 30;
println(st.Total());
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
60
여러 개체 만들기
한 클래스의 여러 개체를 만들 수도 있습니다. 다음은이를 달성 할 수있는 방법의 예입니다. 여기에서는 3 개의 객체 (st, st1 및 st2)를 만들고 그에 따라 인스턴스 멤버와 인스턴스 메서드를 호출합니다.
class Student {
int StudentID;
String StudentName;
int Marks1;
int Marks2;
int Marks3;
int Total() {
return Marks1+Marks2+Marks3;
}
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 30;
println(st.Total());
Student st1 = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 40;
println(st.Total());
Student st3 = new Student();
st.StudentID = 1;
st.StudentName = "Joe";
st.Marks1 = 10;
st.Marks2 = 20;
st.Marks3 = 50;
println(st.Total());
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
60
70
80
계승
상속은 한 클래스가 다른 클래스의 속성 (메서드 및 필드)을 획득하는 프로세스로 정의 할 수 있습니다. 상속을 사용하면 정보를 계층 적 순서로 관리 할 수 있습니다.
other의 속성을 상속하는 클래스를 하위 클래스 (파생 클래스, 자식 클래스)라고하고 속성이 상속 된 클래스를 수퍼 클래스 (기본 클래스, 부모 클래스)라고합니다.
확장
extends클래스의 속성을 상속하는 데 사용되는 키워드입니다. 다음은 extends 키워드 구문입니다. 다음 예에서 우리는 다음을 수행합니다.
Person이라는 클래스를 만듭니다. 이 클래스에는 name이라는 인스턴스 멤버가 하나 있습니다.
Person 클래스에서 확장 된 Student라는 클래스를 만듭니다. Person 클래스에 정의 된 이름 인스턴스 멤버는 Student 클래스에서 상속됩니다.
Student 클래스 생성자에서 기본 클래스 생성자를 호출합니다.
Student 클래스에서 StudentID 및 Marks1의 인스턴스 멤버 2 개를 추가합니다.
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
st.name = "Joe";
println(st.name);
}
}
class Person {
public String name;
public Person() {}
}
class Student extends Person {
int StudentID
int Marks1;
public Student() {
super();
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
Joe
이너 클래스
내부 클래스는 다른 클래스 내에 정의됩니다. 둘러싸는 클래스는 평소와 같이 내부 클래스를 사용할 수 있습니다. 반면에 내부 클래스는 비공개 클래스 인 경우에도 포함하는 클래스의 멤버에 액세스 할 수 있습니다. 바깥 쪽 클래스 이외의 클래스는 내부 클래스에 액세스 할 수 없습니다.
다음은 Outer 및 Inner 클래스의 예입니다. 다음 예에서 우리는 다음을 수행합니다.
- 외부 클래스가 될 Outer라는 클래스를 만듭니다.
- Outer 클래스에서 name이라는 문자열을 정의합니다.
- Outer 클래스 내부에 내부 또는 중첩 클래스 만들기.
- 내부 클래스에서는 Outer 클래스에 정의 된 이름 인스턴스 멤버에 액세스 할 수 있습니다.
class Example {
static void main(String[] args) {
Outer outobj = new Outer();
outobj.name = "Joe";
outobj.callInnerMethod()
}
}
class Outer {
String name;
def callInnerMethod() {
new Inner().methodA()
}
class Inner {
def methodA() {
println(name);
}
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
Joe
추상 클래스
추상 클래스는 일반 개념을 나타내므로 인스턴스화 할 수 없으며 하위 클래스로 생성됩니다. 이들의 구성원에는 필드 / 속성 및 추상 또는 구체적인 방법이 포함됩니다. 추상 메서드에는 구현이 없으며 구체적인 하위 클래스로 구현해야합니다. 추상 클래스는 abstract 키워드로 선언해야합니다. 추상 메소드도 abstract 키워드로 선언해야합니다.
다음 예제에서 Person 클래스는 이제 추상 클래스로 만들어지고 인스턴스화 할 수 없습니다. 또한 구현 세부 사항이없는 추상 클래스에는 DisplayMarks라는 추상 메서드가 있습니다. 학생 클래스에서는 구현 세부 사항을 추가해야합니다.
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
st.name="Joe";
println(st.name);
println(st.DisplayMarks());
}
}
abstract class Person {
public String name;
public Person() { }
abstract void DisplayMarks();
}
class Student extends Person {
int StudentID
int Marks1;
public Student() {
super();
}
void DisplayMarks() {
println(Marks1);
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
Joe
10
null
인터페이스
인터페이스는 클래스가 준수해야하는 계약을 정의합니다. 인터페이스는 구현해야하는 메소드 목록 만 정의하고 메소드 구현은 정의하지 않습니다. 인터페이스는 interface 키워드를 사용하여 선언해야합니다. 인터페이스는 메서드 서명 만 정의합니다. 인터페이스의 방법은 항상public. 인터페이스에서 protected 또는 private 메서드를 사용하는 것은 오류입니다.
다음은 groovy의 인터페이스 예입니다. 다음 예에서 우리는 다음을 수행합니다.
Marks라는 인터페이스를 만들고 DisplayMarks라는 인터페이스 메서드를 만듭니다.
클래스 정의에서 인터페이스를 구현하기 위해 implements 키워드를 사용하고 있습니다.
인터페이스를 구현하고 있으므로 DisplayMarks 메서드에 대한 구현을 제공해야합니다.
class Example {
static void main(String[] args) {
Student st = new Student();
st.StudentID = 1;
st.Marks1 = 10;
println(st.DisplayMarks());
}
}
interface Marks {
void DisplayMarks();
}
class Student implements Marks {
int StudentID
int Marks1;
void DisplayMarks() {
println(Marks1);
}
}
위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
10
null