Java-객체 및 클래스
Java는 객체 지향 언어입니다. 객체 지향 기능을 가진 언어로서 Java는 다음과 같은 기본 개념을 지원합니다.
- Polymorphism
- Inheritance
- Encapsulation
- Abstraction
- Classes
- Objects
- Instance
- Method
- 메시지 전달
이 장에서는 개념 (클래스 및 객체)을 살펴 보겠습니다.
Object− 개체에는 상태와 동작이 있습니다. 예 : 개는 꼬리를 흔드는 것, 짖는 것, 먹는 것 등의 상태 (색, 이름, 품종 및 행동)를 가지고 있습니다. 객체는 클래스의 인스턴스입니다.
Class − 클래스는 해당 유형의 객체가 지원하는 동작 / 상태를 설명하는 템플릿 / 청사진으로 정의 할 수 있습니다.
자바의 객체
이제 객체가 무엇인지 자세히 살펴 보겠습니다. 현실 세계를 고려하면 우리 주변의 많은 물체, 자동차, 개, 인간 등을 찾을 수 있습니다.이 모든 물체는 상태와 행동을 가지고 있습니다.
개를 고려하면 그 상태는-이름, 번식, 색이며 행동은-짖고, 꼬리를 흔들고, 달리는 것입니다.
소프트웨어 개체를 실제 개체와 비교하면 매우 유사한 특성이 있습니다.
소프트웨어 개체에는 상태와 동작도 있습니다. 소프트웨어 개체의 상태는 필드에 저장되고 동작은 메서드를 통해 표시됩니다.
따라서 소프트웨어 개발에서 메서드는 개체의 내부 상태에서 작동하고 개체 간 통신은 메서드를 통해 수행됩니다.
자바 클래스
클래스는 개별 개체가 생성되는 청사진입니다.
다음은 수업 샘플입니다.
예
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
클래스는 다음 변수 유형을 포함 할 수 있습니다.
Local variables− 메서드, 생성자 또는 블록 내에 정의 된 변수를 지역 변수라고합니다. 변수는 메서드 내에서 선언되고 초기화되며 메서드가 완료되면 변수가 소멸됩니다.
Instance variables− 인스턴스 변수는 클래스 내부에 있지만 메서드 외부에있는 변수입니다. 이러한 변수는 클래스가 인스턴스화 될 때 초기화됩니다. 인스턴스 변수는 특정 클래스의 모든 메서드, 생성자 또는 블록 내에서 액세스 할 수 있습니다.
Class variables − 클래스 변수는 static 키워드를 사용하여 메서드 외부의 클래스 내에서 선언 된 변수입니다.
클래스는 다양한 종류의 메서드 값에 액세스하기 위해 여러 메서드를 가질 수 있습니다. 위의 예에서 barking (), hungry () 및 sleeping ()은 메소드입니다.
다음은 Java 언어 클래스를 살펴볼 때 논의해야 할 몇 가지 중요한 주제입니다.
생성자
클래스에 대해 논의 할 때 가장 중요한 하위 주제 중 하나는 생성자입니다. 모든 클래스에는 생성자가 있습니다. 클래스에 대한 생성자를 명시 적으로 작성하지 않으면 Java 컴파일러는 해당 클래스에 대한 기본 생성자를 빌드합니다.
새 객체가 생성 될 때마다 하나 이상의 생성자가 호출됩니다. 생성자의 주요 규칙은 클래스와 동일한 이름을 가져야한다는 것입니다. 클래스에는 둘 이상의 생성자가있을 수 있습니다.
다음은 생성자의 예입니다.
예
public class Puppy {
public Puppy() {
}
public Puppy(String name) {
// This constructor has one parameter, name.
}
}
Java는 클래스의 인스턴스를 하나만 만들 수있는 싱글 톤 클래스 도 지원합니다 .
Note− 두 가지 유형의 생성자가 있습니다. 생성자에 대해서는 다음 장에서 자세히 설명하겠습니다.
개체 만들기
앞서 언급했듯이 클래스는 객체에 대한 청사진을 제공합니다. 따라서 기본적으로 객체는 클래스에서 생성됩니다. Java에서 new 키워드는 새 개체를 만드는 데 사용됩니다.
클래스에서 객체를 만들 때 세 단계가 있습니다-
Declaration − 객체 유형이있는 변수 이름이있는 변수 선언.
Instantiation − 'new'키워드는 개체를 생성하는 데 사용됩니다.
Initialization− '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
소스 파일 선언 규칙
이 섹션의 마지막 부분에서 이제 소스 파일 선언 규칙을 살펴 보겠습니다. 이러한 규칙은 소스 파일에서 클래스, import 문 및 패키지 문을 선언 할 때 필수적 입니다.
소스 파일 당 하나의 공용 클래스 만있을 수 있습니다.
소스 파일에는 여러 개의 비공개 클래스가있을 수 있습니다.
공개 클래스 이름은 소스 파일의 이름이어야하며 다음이 추가되어야합니다. .java끝에. 예를 들어, 클래스 이름은 공용 클래스 Employee {} 이고 소스 파일은 Employee.java 여야합니다.
클래스가 패키지 내부에 정의 된 경우 패키지 문은 소스 파일의 첫 번째 문이어야합니다.
import 문이있는 경우 패키지 문과 클래스 선언 사이에 작성해야합니다. 패키지 문이없는 경우 import 문은 소스 파일의 첫 번째 줄에 있어야합니다.
가져 오기 및 패키지 문은 소스 파일에있는 모든 클래스를 의미합니다. 소스 파일의 다른 클래스에 다른 import 및 / 또는 package 문을 선언 할 수 없습니다.
클래스에는 여러 액세스 수준이 있으며 다양한 유형의 클래스가 있습니다. 추상 클래스, 최종 클래스 등. 액세스 수정 자 장에서이 모든 것에 대해 설명 할 것입니다.
위에서 언급 한 클래스 유형 외에도 Java에는 내부 클래스 및 익명 클래스라는 특수 클래스도 있습니다.
자바 패키지
간단히 말해서 클래스와 인터페이스를 분류하는 방법입니다. Java로 애플리케이션을 개발할 때 수백 개의 클래스와 인터페이스가 작성되므로 이러한 클래스를 분류하는 것은 필수 일뿐만 아니라 삶을 훨씬 쉽게 만듭니다.
수입 명세서
Java에서 패키지 및 클래스 이름을 포함하는 완전한 이름이 제공되면 컴파일러는 소스 코드 또는 클래스를 쉽게 찾을 수 있습니다. Import 문은 컴파일러가 특정 클래스를 찾을 수있는 적절한 위치를 제공하는 방법입니다.
예를 들어, 다음 줄은 java_installation / java / io 디렉토리에서 사용 가능한 모든 클래스를로드하도록 컴파일러에 요청합니다.
import java.io.*;
간단한 사례 연구
사례 연구를 위해 두 개의 클래스를 만들 것입니다. Employee 및 EmployeeTest입니다.
먼저 메모장을 열고 다음 코드를 추가하십시오. 이것이 Employee 클래스이고 클래스가 공용 클래스임을 기억하십시오. 이제이 소스 파일을 Employee.java라는 이름으로 저장하십시오.
Employee 클래스에는 이름, 나이, 지정 및 급여의 네 가지 인스턴스 변수가 있습니다. 클래스에는 매개 변수를 사용하는 명시 적으로 정의 된 생성자가 하나 있습니다.
예
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 클래스입니다.
EmployeeTest.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
다음은 무엇입니까?
다음 세션에서는 Java의 기본 데이터 유형과 Java 응용 프로그램을 개발할 때 어떻게 사용할 수 있는지에 대해 설명합니다.