Groovy-객체 지향

Groovy에는 다른 객체 지향 언어와 마찬가지로 프로그래밍 언어의 객체 지향 특성을 나타내는 클래스 및 객체 개념이 있습니다. Groovy 클래스는 데이터 및 해당 데이터에서 작동하는 메서드의 모음입니다. 함께 클래스의 데이터와 메서드는 문제 영역에서 실제 개체를 나타내는 데 사용됩니다.

Groovy의 클래스는 해당 클래스에 의해 정의 된 객체의 상태 (데이터)와 동작을 선언합니다. 따라서 Groovy 클래스는 해당 클래스의 인스턴스 필드와 메서드를 모두 설명합니다.

다음은 Groovy의 클래스 예입니다. 클래스 이름은 Student이며 두 개의 필드가 있습니다.StudentIDStudentName. 주 함수에서 우리는이 클래스의 객체를 생성하고 값을StudentIDStudentName 개체의.

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