Java 클래스와 객체를 이해하기 전에 객체지향 프로그래밍에 대해 간략하게 소개하겠습니다. 프로그래밍은 개체를 통해 프로그램을 설계하는 것입니다. 개체는 개체를 나타내며 개체를 명확하게 식별할 수 있습니다.
객체지향 언어로서의 자바. 다음과 같은 기본 개념이 지원됩니다.
다형성
상속하다
캡슐화
추상적인
친절한
물체
예
방법
메시지 구문 분석
이 섹션에서는 객체와 클래스의 개념에 중점을 둡니다.
Object : 객체는 클래스의 인스턴스이며 상태와 동작을 갖습니다. 예를 들어, 개는 개체입니다. 상태에는 색깔, 이름, 행동이 포함됩니다. 꼬리 흔들기, 짖기, 먹기 등.
클래스 : 클래스는 객체 클래스의 동작과 상태를 설명하는 템플릿입니다.
이제 객체가 무엇인지 자세히 살펴 보겠습니다. 주변의 실제 세계를 살펴보면 자동차, 개, 사람 등 주변에 많은 물체가 있다는 것을 알 수 있습니다. 이러한 모든 개체에는 고유한 상태와 동작이 있습니다.
개를 예로 들면, 상태에는 이름, 품종, 색깔이 포함되며, 행동에는 짖기, 꼬리 흔들기, 달리기 등이 포함됩니다.
실제 개체와 소프트웨어 개체를 비교하면 매우 유사합니다.
소프트웨어 개체에도 상태와 동작이 있습니다. 소프트웨어 개체의 상태는 해당 속성이며 해당 동작은 메서드를 통해 반영됩니다.
소프트웨어 개발에서 메소드는 객체의 내부 상태 변화에 대해 작동하며 객체 간의 상호 호출도 메소드를 통해 수행됩니다.
클래스는 Java 객체를 생성하기 위한 템플릿으로 생각할 수 있습니다.
다음과 같은 간단한 클래스를 통해 Java의 클래스 정의를 이해해 보겠습니다.
공개 클래스 개{
끈 품종;
나이;
문자열 색상;
공허한 짖음(){
}
배고픈 무효(){
}
수면 무효(){
}
}
클래스에는 다음 유형의 변수가 포함될 수 있습니다.
지역 변수 : 메소드, 생성자 또는 명령문 블록에 정의된 변수를 지역 변수라고 합니다. 변수 선언과 초기화는 모두 메소드에 있습니다. 메소드가 끝나면 변수는 자동으로 소멸됩니다.
멤버 변수 : 멤버 변수는 클래스 내부와 메서드 본문 외부에 정의된 변수입니다. 이러한 변수는 객체가 생성될 때 인스턴스화됩니다. 멤버 변수는 클래스 메서드, 생성자 및 클래스별 명령문 블록을 통해 액세스할 수 있습니다.
클래스 변수 : 클래스 변수는 클래스 내부, 메서드 본문 외부에서도 선언되지만 정적 유형으로 선언되어야 합니다.
클래스에는 여러 메서드가 있을 수 있습니다. 위의 예에서 barking()
, hungry()
및 sleeping()
은 모두 Dog 클래스의 메서드입니다.
모든 클래스에는 생성자 메서드가 있습니다. 클래스에 대해 생성자가 명시적으로 정의되지 않은 경우 Java 컴파일러는 클래스에 대한 기본 생성자를 제공합니다.
객체를 생성할 때 적어도 하나의 생성자 메서드를 호출해야 합니다. 생성자의 이름은 클래스와 동일해야 합니다. 클래스는 여러 생성자를 가질 수 있습니다.
다음은 생성자의 예입니다.
공개 클래스 강아지{
공개Puppy(){
}
public Puppy(문자열 이름){
// 이 생성자에는 매개변수가 하나만 있습니다: name
}
}
객체는 클래스를 기반으로 생성됩니다. Java에서는 new
키워드를 사용하여 새 개체를 만듭니다. 객체를 생성하려면 다음 세 단계가 필요합니다.
선언 : 객체 이름과 객체 유형을 포함하여 객체를 선언합니다.
인스턴스화 : 객체를 생성하려면 new
키워드를 사용하세요.
초기화 : new
사용하여 객체를 생성할 때 생성자 메서드가 호출되어 객체를 초기화합니다.
다음은 객체 생성의 예입니다.
공개 클래스 강아지{
public Puppy(문자열 이름){
//이 생성자에는 매개변수가 하나만 있습니다: name
System.out.println("강아지 이름은 :" + name );
}
공개 정적 무효 메인(문자열 []args){
//다음 명령문은 Puppy 객체를 생성합니다. Puppy myPuppy = new Puppy( "tommy" );
}
}
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 인쇄됩니다.
강아지 이름은 :tommy
다음과 같이 생성된 객체를 통해 멤버 변수 및 멤버 메서드에 액세스합니다.
/* 객체 인스턴스화 */
ObjectReference = 새로운 생성자();
/* 변수에 접근 */
ObjectReference.변수이름;
/* 클래스의 접근 방법 */
ObjectReference.MethodName();
다음 예제에서는 인스턴스 변수에 액세스하고 멤버 메서드를 호출하는 방법을 보여줍니다.
공개 클래스 강아지{
int 강아지나이;
public Puppy(문자열 이름){
// 이 생성자에는 매개변수가 하나만 있습니다: name
System.out.println("전달된 이름은 :" + name );
}
공개 무효 setAge( int age ){
강아지 나이 = 나이;
}
공개 int getAge( ){
System.out.println("강아지의 나이는 :" + PuppyAge );
강아지 나이를 반환합니다.
}
공개 정적 무효 메인(문자열 []args){
/* 객체 생성 */
강아지 myPuppy = 새 강아지( "토미" );
/* 메소드를 통해 연령 설정 */
myPuppy.setAge(2);
/* 나이를 얻기 위해 다른 메소드 호출 */
myPuppy.getAge( );
/*다음과 같이 멤버 변수에 액세스할 수도 있습니다 */
System.out.println("변수 값 :" + myPuppy.puppyAge );
}
}
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 나타납니다.
전달된 이름은 :tommy입니다.
강아지의 나이는 :2 입니다
변수 값:2
이 섹션의 마지막 부분에서는 소스 파일의 선언 규칙에 대해 알아봅니다. 소스 파일에 여러 클래스를 정의할 때와 import
문 및 package
문이 있는 경우 이러한 규칙에 특별한 주의를 기울이십시오.
소스 파일에는 public
클래스가 하나만 있을 수 있습니다.
소스 파일에는 여러 개의 public
클래스가 있을 수 있습니다.
소스 파일의 이름은 public
클래스의 클래스 이름과 일치해야 합니다. 예를 들어 소스 파일에 있는 public
클래스의 클래스 이름은 Employee
이고 소스 파일의 이름은 Employee.java
여야 합니다.
클래스가 패키지에 정의된 경우 package
문은 소스 파일의 첫 번째 줄에 있어야 합니다.
소스 파일에 import
문이 포함되어 있으면 package
문과 클래스 정의 사이에 배치해야 합니다. package
문이 없으면 import
문이 소스 파일의 첫 번째에 있어야 합니다.
import
문과 package
문은 소스 파일에 정의된 모든 클래스에 유효합니다. 동일한 소스 파일에서 서로 다른 클래스에 서로 다른 패키지 선언을 제공할 수 없습니다.
클래스에는 여러 액세스 수준이 있으며 클래스도 추상 클래스, final
클래스 등 다양한 유형으로 나뉩니다. 이는 액세스 제어 장에서 소개됩니다.
위에서 언급한 유형 외에도 Java에는 내부 클래스 및 익명 클래스와 같은 몇 가지 특수 클래스도 있습니다.
패키지는 주로 클래스와 인터페이스를 분류하는 데 사용됩니다. Java 프로그램을 개발할 때 수백, 수천 개의 클래스를 작성하게 되므로 클래스와 인터페이스를 분류하는 것이 필요합니다.
Java에서는 패키지 이름과 클래스 이름을 포함하여 완전한 정규화된 이름이 제공되면 Java 컴파일러가 소스 코드나 클래스를 쉽게 찾을 수 있습니다. Import
문은 컴파일러가 특정 클래스를 찾을 수 있도록 합리적인 경로를 제공하는 데 사용됩니다.
예를 들어, 다음 명령줄은 컴파일러에게 java_installation/java/io 경로의 모든 클래스를 로드하도록 지시합니다.
import java.io.*;
이 예에서는 Employee와 EmployeeTest라는 두 개의 클래스를 만듭니다.
먼저 텍스트 편집기를 열고 다음 코드를 붙여넣습니다. 파일은 Employee.java로 저장됩니다.
Employee 클래스에는 이름, 나이, 직위, 급여라는 네 가지 멤버 변수가 있습니다. 클래스는 매개변수가 하나만 있는 생성자 메서드를 명시적으로 선언합니다.
import java.io.*;
공개 클래스 직원{
문자열 이름;
나이;
문자열 지정;
이중 급여;
// Employee 클래스 생성자 public Employee(String name){
this.name = 이름;
}
//나이 값 설정 public void empAge(int empAge){
나이 = emAge;
}
/*지정 값 설정*/
공공 무효 empDesignation(문자열 empDesig){
지정 = empDesig;
}
/*급여 값 설정*/
공공 무효 empSalary(이중 empSalary){
급여 = empSalary;
}
/* 정보 인쇄 */
공공 무효 printEmployee(){
System.out.println("이름:"+ 이름 );
System.out.println("나이:" + 나이 );
System.out.println("지정:" + 지정 );
System.out.println("급여:" + 급여);
}
}
프로그램 실행은 main
메서드에서 시작됩니다. 이 프로그램을 실행하기 위해서는 main
메소드를 포함시켜야 하고, 인스턴스 객체를 생성해야 합니다.
EmployeeTest 클래스는 아래에 나와 있는데, 이는 Employee 클래스의 두 인스턴스를 인스턴스화하고 변수 값을 설정하는 메서드를 호출합니다.
EmployeeTest.java 파일에 다음 코드를 저장합니다.
import java.io.*;
공개 클래스 EmployeeTest{
공개 정적 무효 메인(문자열 인수[]){
/* 생성자를 사용하여 두 개의 객체 생성 */
직원 empOne = new Employee("제임스 스미스");
직원 empTwo = new Employee("메리 앤");
//이 두 개체의 멤버 메서드를 호출합니다. empOne.empAge(26);
empOne.empDesignation("수석 소프트웨어 엔지니어");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("소프트웨어 엔지니어");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
이 두 파일을 컴파일하고 EmployeeTest 클래스를 실행하면 다음 결과를 볼 수 있습니다.
C:>javacEmployee.java
C :> vi EmployeeTest.java
C:>javacEmployeeTest.java
C :>javaEmployeeTest
이름:제임스 스미스
나이:26
직위:수석 소프트웨어 엔지니어
급여:1000.0
이름:메리 앤
나이:21
직위:소프트웨어 엔지니어
급여:500.0