개발「JAVA」객체지향 언어 및 기능(다형성, 상속, 캡슐화, 클래스)

자바는 객체 지향 언어입니다. 객체 지향 기능을 통해 다음과 같은 기본 개념을 지원하는 언어로서의 Java –

  • 다형성
  • 계승
  • 캡슐화
  • 추출
  • 수업
  • 개인
  • 사례
  • 방법
  • 메시지 전달

이 장에서는 클래스와 객체의 개념을 살펴보겠습니다.

  • 물체 – 개체에는 상태와 동작이 있습니다. 예: 개는 색상, 이름, 품종 및 행동, 꼬리 흔들기, 짖기, 먹기와 같은 상태를 가집니다. 개체는 클래스의 인스턴스입니다.
  • 수업 – 클래스는 해당 유형의 개체가 지원하는 동작/상태를 설명하는 템플릿/청사진으로 정의할 수 있습니다.

자바의 객체

이제 객체가 무엇인지 자세히 살펴 보겠습니다. 현실 세계를 고려하면 자동차, 개, 인간과 같은 우리 주변의 많은 물체를 찾을 수 있습니다. 이러한 모든 개체에는 상태와 동작이 있습니다.

우리가 개를 생각한다면 그 상태는 이름, 품종, 색깔이며 행동은 짖고 꼬리를 흔들고 뛰는 것입니다.

소프트웨어 개체를 물리적 개체와 비교하면 매우 유사한 특성을 가집니다.

소프트웨어 개체에는 상태와 동작도 있습니다. 소프트웨어 개체의 상태는 필드에 저장되며 동작은 메서드를 통해 노출됩니다.

따라서 소프트웨어 개발에서 메서드는 개체의 내부 상태에서 작동하며 개체 간의 통신은 메서드를 통해 이루어집니다.

자바의 클래스

클래스는 개별 객체가 생성되는 청사진입니다.

다음은 수업 샘플입니다.

public class Dog {
   String breed;
   int age;
   String color;

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

클래스는 다음 변수 유형을 포함할 수 있습니다.

  • 지역 변수 – 메서드, 생성자 또는 블록 내부에 정의된 변수는 지역 변수그것은이라고. 변수는 메서드 내에서 선언되고 초기화되며 메서드가 완료되면 소멸됩니다.
  • 인스턴스 변수 – 인스턴스 변수는 클래스 내에 있지만 메서드 외부에 있습니다. 변하기 쉬운안돼. 이러한 변수는 클래스가 인스턴스화될 때 초기화됩니다. 인스턴스 변수는 특정 클래스의 메서드, 생성자 또는 블록 내에서 액세스할 수 있습니다.
  • 클래스 변수 – 클래스 변수는 정적 키워드를 사용하여 메서드 외부의 클래스 내에서 선언됩니다. 변하기 쉬운안돼.

클래스는 다양한 종류의 메서드 값에 액세스하기 위한 여러 메서드를 가질 수 있습니다. 위의 예시에서 bark(), hungry(), sleeping()이 메소드입니다.

다음은 Java 언어의 클래스를 살펴볼 때 논의해야 할 몇 가지 중요한 주제입니다.

건설자

클래스를 논의할 때 가장 중요한 하위 주제 중 하나는 생성자입니다. 모든 클래스에는 생성자가 있습니다. 클래스에 대한 생성자를 명시적으로 작성하지 않으면 Java 컴파일러는 해당 클래스에 대한 기본 생성자를 빌드합니다.

새 객체가 생성될 때마다 하나 이상의 생성자가 호출됩니다. 생성자의 기본 규칙은 클래스와 동일한 이름을 가져야 한다는 것입니다. 클래스는 둘 이상의 생성자를 가질 수 있습니다.

다음은 생성자의 예입니다.

public class Puppy {
   public Puppy() {
   }

   public Puppy(String name) {
      // This constructor has one parameter, name.
   }
}

Java에서는 클래스의 인스턴스를 하나만 만들 수도 있습니다. 싱글톤 클래스깁스 지원하다.

기본 – 두 가지 유형의 생성자가 있습니다. 다음 장에서 생성자에 대해 자세히 설명합니다.

객체 생성

앞에서 언급했듯이 클래스는 개체에 대한 청사진을 제공합니다. 따라서 기본적으로 객체는 클래스에서 생성됩니다. Java에서 new 키워드는 새 객체를 생성하는 데 사용됩니다.

클래스에서 개체를 만들 때 세 단계가 있습니다.

  • 선언 – 개체 유형을 가진 변수 이름으로 변수 선언.
  • 인스턴스화 – ‘new’ 키워드는 개체를 생성하는 데 사용됩니다.
  • 초기화 – ‘new’ 키워드 다음에는 생성자 호출이 옵니다. 이 호출은 새 객체를 초기화합니다.

다음은 객체 생성의 예입니다.

public class Puppy {
   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name );
   }

   public static void main(String ()args) {
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

위의 프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

인쇄

Passed Name is :tommy

인스턴스 변수 및 메서드 액세스

인스턴스 변수 및 메서드는 생성된 개체를 통해 액세스됩니다. 인스턴스 변수에 액세스하기 위한 정규화된 경로는 다음과 같습니다.

/* First create an object */
ObjectReference = new Constructor();

/* Now call a variable as follows */
ObjectReference.variableName;

/* Now you can call a class method as follows */
ObjectReference.MethodName();

이 예제에서는 클래스의 인스턴스 변수 및 메서드에 액세스하는 방법을 설명합니다.

public class Puppy {
   int puppyAge;

   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Name chosen is :" + name );
   }

   public void setAge( int age ) {
      puppyAge = age;
   }

   public int getAge( ) {
      System.out.println("Puppy's age is :" + puppyAge );
      return puppyAge;
   }

   public static void main(String ()args) {
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge );
   }
}

위의 프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

인쇄

Name chosen is :tommy
Puppy's age is :2
Variable Value :2

소스 파일 선언 규칙

이 섹션의 마지막 부분으로 소스 파일 선언 규칙을 살펴보겠습니다. 이러한 규칙은 소스 파일에서 클래스로 정의할 수 있습니다. 수입 문과 패키지 문을 선언할 때 필요합니다.

  • 소스 파일당 하나의 공용 클래스만 있을 수 있습니다.
  • 소스 파일에는 여러 개인 클래스가 있을 수 있습니다.
  • 공개 클래스 이름은 소스 파일의 이름이어야 하며 끝에 있어야 합니다. .자바 예를 들어 클래스 이름이 공개 클래스 직원{}소스 파일은 Employee.java여야 합니다.
  • 클래스가 패키지 내에 정의된 경우 패키지 문은 소스 파일의 첫 번째 문이어야 합니다.
  • import 문이 있으면 package 문과 class 선언 사이에 작성해야 합니다. package 문이 없는 경우 import 문은 소스 파일의 첫 번째 줄이어야 합니다.
  • 가져오기 및 패키지 문은 소스 파일의 모든 클래스를 의미합니다. 소스 파일의 다른 클래스에 대해 다른 가져오기 및/또는 패키지 문을 선언할 수 없습니다.

클래스는 서로 다른 액세스 수준을 가지며 다양한 유형의 클래스가 있습니다. 추상 클래스, 최종 클래스 등. 액세스 수정자 장에서 이 모든 것을 설명하겠습니다.

위에서 언급한 클래스 유형 외에도 Java에는 내부 클래스 및 익명 클래스라는 특수 클래스가 있습니다.

자바 패키지

간단히 말해서 클래스와 인터페이스를 분류하는 방법입니다. Java로 애플리케이션을 개발할 때 수백 개의 클래스와 인터페이스가 작성되므로 이러한 클래스를 분류하는 것이 필수적이며 삶을 훨씬 더 쉽게 만듭니다.

진술 받기

Java에서 컴파일러는 패키지 및 클래스 이름을 포함하는 정규화된 이름이 제공되는 경우 소스 코드를 쉽게 찾을 수 있습니다. import 문은 컴파일러가 특정 클래스를 찾을 적절한 위치를 제공하는 방법입니다.

예를 들어, 다음 행은 java_installation/java/io 디렉토리에서 사용 가능한 모든 클래스를 로드하도록 컴파일러에 요청합니다.

import java.io.*;

간략한 사례 연구

이 사례 연구에서는 두 개의 클래스를 만들 것입니다. 직원 및 직원 테스트.

먼저 메모장을 열고 다음 코드를 추가합니다. 이 클래스는 Employee 클래스이고 이 클래스는 공용 클래스입니다. 이제 이 소스 파일을 Employee.java로 저장합니다.

Employee 클래스에는 Name, Age, Title 및 Salary의 네 가지 인스턴스 변수가 있습니다. 이 클래스에는 매개 변수를 사용하는 명시적으로 정의된 생성자가 하나 있습니다.

import java.io.*;
public class Employee {

   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name) {
      this.name = name;
   }

   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge) {
      age = empAge;
   }

   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig) {
      designation = empDesig;
   }

   /* Assign the salary to the variable	salary.*/
   public void empSalary(double empSalary) {
      salary = empSalary;
   }

   /* Print the Employee details */
   public void printEmployee() {
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

이 자습서의 앞부분에서 언급했듯이 처리는 기본 메서드에서 시작됩니다. 따라서 이 Employee 클래스를 실행하려면 기본 메서드가 있어야 하고 객체를 생성해야 합니다. 이러한 작업에 대해 별도의 클래스를 만들 것입니다.

다음은 Employee 클래스의 두 인스턴스를 생성하고 각 개체에 대해 메서드를 호출하여 각 변수에 값을 할당합니다. EmployeeTest 수업입니다.

직원 test.java 파일에 다음 코드를 저장합니다.

import java.io.*;
public class EmployeeTest {

   public static void main(String args()) {
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

이제 두 클래스를 모두 컴파일한 다음 EmployeeTest다음과 같이 결과를 확인하십시오 –

인쇄

C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0