logo

Java의 클래스 유형

자바에서는 수업 개별 개체를 만들 수 있는 청사진입니다. 자바는 예어 클래스를 선언할 수 있는 명명된 클래스입니다. 클래스 내부에서 우리는 다음을 정의합니다. 수업 회원 및 기능. 생성이 불가능합니다. 자바 프로그램 수업 없이. 클래스를 다음과 같이 참조할 수도 있습니다. 사용자 정의 수업 유형

Java에는 7가지 유형의 클래스가 있습니다.

    정적 클래스 최종 수업 추상 클래스 구체적인 수업 싱글톤 클래스 POJO 클래스 내부 클래스
Java의 클래스 유형

정적 클래스

~ 안에 Java, static은 메모리의 객체를 관리하는 키워드입니다. 정적 개체는 클래스의 인스턴스가 아닌 클래스에 속합니다.

우리는 수업을 할 수 있어요 공전 중첩 클래스인 경우에만 가능합니다. 정적 클래스를 중첩 클래스라고 말할 수도 있습니다. 이는 다른 클래스 내에서 정적으로 선언된 클래스를 정적 ​​클래스라고 함을 의미합니다. 중첩된 정적 클래스에는 외부 클래스에 대한 참조가 필요하지 않습니다. 정적 클래스의 목적은 상속된 클래스의 개요를 제공하는 것입니다.

쿼리 선택기

정적 클래스의 속성은 다음과 같습니다.

  • 클래스에는 정적 멤버만 있습니다.
  • 외부 클래스의 멤버(비정적)에 액세스할 수 없습니다.
  • 정적 클래스의 객체를 생성할 수 없습니다.

정적 클래스의 개념을 프로그램을 통해 이해해보자.

StaticClassExample.java

 public class StaticClassExample { private static String str = 'Javatpoint'; //nested class which is a Static class public static class StaticDemo { //non-static method of Static class public void show() { System.out.println(str); } } public static void main(String args[]) { StaticClassExample.StaticDemo obj = new StaticClassExample.StaticDemo(); obj.show(); } } 

산출:

 Javatpoint 

위 프로그램의 외부 클래스에서 변수를 선언했습니다. str 정적 컨텍스트에서 해당 변수에 액세스하기 때문에 정적입니다. 해당 변수를 비정적 변수로 선언하면 컴파일러는 오류를 표시합니다. 중첩된 정적 클래스는 외부 클래스의 비정적 멤버에 액세스할 수 없습니다.

위 프로그램에서 두 번째로 주목해야 할 점은 중첩 클래스의 객체를 생성하기 위해 외부 클래스의 인스턴스를 생성할 필요가 없다는 것입니다. 중첩 클래스가 정적 클래스가 아닌 경우 외부 클래스의 인스턴스를 만들어야 합니다.

최종 수업

최종이라는 단어는 변경할 수 없음을 의미합니다. 그만큼 결정적인 Java의 클래스는 다음을 사용하여 선언할 수 있습니다. 최종 키워드 . 클래스를 final로 선언하면 값은 프로그램 전체에서 동일하게 유지됩니다. 마지막 수업의 목적은 수업을 만드는 것입니다. 불변 String 클래스와 같습니다. 이는 클래스를 불변으로 만드는 방법일 뿐입니다. 기억하세요. 최종 수업은 연장할 수 없습니다 . 또한 클래스가 하위 클래스로 분류되는 것을 방지합니다. .

프로그램을 통해 최종수업의 개념을 이해해보자.

FinalClassExample.java

 //base class declared as final final class A { void printmsg() { System.out.print('Base class method is executed.'); } } //derived class //extending a final class which is not possible //it shows the error cannot inherit final class at compile time class B extends A { void printmsg() { System.out.print('Derived class method is executed.'); } } //main class public class FinalClassExample { public static void main(String[] arg) { B obj = new B(); obj.printmsg(); } } 

산출:

 /FinalClassExample.java:11: error: cannot inherit from final A class B extends A 

추상 클래스

추상 수업 키워드로 선언된 입니다. 추상적인 . 클래스에는 추상 메소드가 포함될 수도 있고 포함되지 않을 수도 있습니다. 추상 클래스의 인스턴스를 만들 수는 없지만 하위 클래스는 될 수 있습니다. 이러한 클래스는 불완전하므로 추상 클래스를 완성하려면 추상 클래스를 구체적인 클래스로 확장해야 합니다. 하위 클래스를 추상으로 선언하면 추상 메서드 구현을 제공해야 합니다. 따라서 서브클래스도 abstract로 선언해야 합니다. 추상 클래스를 사용하여 데이터 숨기기를 달성할 수 있습니다. 추상 클래스의 예는 다음과 같습니다. Abstarct지도 컬렉션 프레임워크의 일부인 클래스입니다.

추상클래스의 개념을 프로그램을 통해 이해해보자.

AbstractClassExample.java

 //abstract class abstract class MathematicalOperations { int a=30, b=40; //abstract method public abstract void add(); } public class Operation extends MathematicalOperations { //definition of abstract method public void add() { System.out.println('Sum of a and b is: 'a+b); } public static void main(String args[]) { MathematicalOperations obj = new Operation(); obj.add(); } } 

산출:

 Sum of a and b is: 70 

구체적인 수업

이는 일반 Java 클래스입니다. 기본 클래스에 아직 구현되지 않은 모든 메서드에 대한 기본 구현을 제공하는 파생 클래스를 콘크리트 수업. 즉, 추상 클래스의 모든 메소드가 구현된 일반 Java 클래스입니다. 구체적인 클래스의 객체를 직접 생성할 수 있습니다. 구상 클래스와 추상 클래스는 동일하지 않다는 점을 기억하세요. 구체적인 클래스는 상위 클래스를 확장할 수 있습니다. 특정 요구 사항에 사용됩니다.

구체적인 클래스의 개념을 프로그램을 통해 이해해보자.

ConcreteClassExample.java

 //Concrete Class public class ConcreteClassExample { //method of the concreted class static int product(int a, int b) { return a * b; } public static void main(String args[]) { //method calling int p = product(6, 8); System.out.println('Product of a and b is: ' + p); } } 

산출:

 Product of a and b is: 48 

싱글톤 클래스

한 번에 하나의 객체만 갖는 클래스를 클래스라고 합니다. 싱글톤 클래스 . 하지만 두 번째로 인스턴스를 생성하려고 하면 새로 생성된 인스턴스가 첫 번째 인스턴스를 가리킵니다. 인스턴스를 통해 클래스 내부를 변경한 경우 해당 수정 사항은 단일 인스턴스의 변수에도 영향을 미칩니다. 일반적으로 데이터베이스 연결 및 소켓 프로그래밍을 처리하는 동안 액세스를 제어하는 ​​데 사용됩니다. 싱글톤 클래스를 생성하려면 다음을 수행하세요.

  • 비공개 만들기 건설자 .
  • 싱글톤 클래스의 개체를 반환하는 정적 메서드(지연 초기화 사용)를 만듭니다.

SingletonClassExample.java

 public class Singleton { private String objectState; private static Singleton instance = null; private Singleton() throws Exception { this.objectState = 'Javatpoint'; } public static Singleton getInstance() { if(instance==null) { try { instance=new Singleton(); } catch(Exception e) { e.printStackTrace(); } } return instance; } public String getObjectState() { return objectState; } public void setObjectState(String objectState) { this.objectState = objectState; } } 

산출:

 Javatpoint 

POJO 클래스

Java에서 POJO는 다음을 의미합니다. 일반 오래된 Java 객체. 개인 변수, setter 및 getter만 포함하는 Java 클래스를 다음과 같이 알려져 있습니다. 포조 수업. Java 프로그램의 재사용성과 가독성을 높이는 Java 개체를 정의하는 데 사용됩니다. 클래스는 캡슐화를 제공합니다. 이러한 클래스를 이해하기 쉽기 때문에 Java에서 널리 사용됩니다. POJO 클래스에는 다음과 같은 속성이 있습니다.

  • Arrays, HttpServlet 등과 같은 미리 정의된 클래스를 확장하지 않습니다.
  • 미리 지정된 주석을 포함할 수 없습니다.
  • 미리 정의된 것을 구현할 수 없습니다. 인터페이스 .
  • 생성자를 추가할 필요는 없습니다.
  • 모든 인스턴스 변수는 비공개여야 합니다.
  • 게터/세터 행동 양식 공개되어야 합니다.

Java 프로그램을 통해 POJO 클래스의 개념을 이해해보자.

PojoClassExample.java

 class PojoDemo { //private variable private double price=89764.34; //getter method public double getPrice() { return price; } //setter method public void setPrice(int price) { this.price = price; } } //main class public class PojoClassExample { public static void main(String args[]) { PojoDemo obj = new PojoDemo(); System.out.println('The price of an article is '+ obj.getPrice()+' Rs.'); } } 

산출:

 The price of an article is 89764.34 Rs. 

내부 클래스

Java를 사용하면 클래스 내에 클래스를 정의할 수 있으며 이러한 클래스는 다음과 같이 알려져 있습니다. 중첩 클래스 . 클래스를 논리적으로 그룹화하고 달성하는 데 사용됩니다. 캡슐화 . 외부 클래스 멤버(private 포함)는 다음을 통해 액세스할 수 있습니다. 내부 클래스 . 중첩 클래스를 선언하는 일반적인 구문은 다음과 같습니다.

 class OuterClass { //code class NestedClass { //code } } 

중첩 클래스에는 두 가지 유형이 있습니다.

1. 정적 중첩 클래스: 수업은 공전 그리고 중첩된 정적 중첩 클래스라고 합니다. 외부 클래스의 인스턴스 멤버와 상호 작용합니다. 다음 구문을 사용하여 정적 중첩 클래스의 개체를 만들 수 있습니다.

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

2. 비정적 중첩 클래스: 비정적 중첩 클래스가 호출됩니다. 내부 클래스 .

정적 중첩 클래스와 내부 클래스를 선언하는 일반적인 구문은 다음과 같습니다.

 class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } } 

Java 프로그램을 통해 내부 클래스의 개념을 이해해보자.

InnerClassExample.java

 public class InnerClassExample { public static void main(String[] args) { System.out.println('This is outer class.'); } class InnerClass { public void printinner() { System.out.println('This is inner class.'); } } } 

내부 클래스 유형

Java는 다음과 같은 두 가지 유형의 내부 클래스를 제공합니다.

로컬 내부 클래스

블록 내부에 정의된 내부 클래스 유형입니다. 여기서 블록은 메소드 본문(중괄호 쌍으로 묶인 명령문 그룹)을 나타냅니다. 블록 내부에 정의하기 때문에 메소드 로컬 내부 클래스라고도 합니다. 이는 블록의 인스턴스 멤버에 액세스할 수 있기 때문에 비정적 클래스입니다. 메소드 본문에서 로컬 내부 클래스를 정의할 수 있습니다. 이러한 클래스는 해당 클래스가 정의된 블록에서 인스턴스화되어야 합니다.

Java 프로그램(내부 클래스를 포함하는 프로그램)을 컴파일할 때 컴파일러는 두 개의 클래스 파일을 생성합니다. 외부 클래스 그리고 외부Inner.class. 하나는 외부 클래스용이고 다른 하나는 외부 클래스에 대한 참조를 포함하는 내부 클래스용입니다.

로컬 내부 클래스의 개념을 자바 프로그램을 통해 이해해보자.

외부클래스.java

 public class OuterClass { private void getValue() { //if you are using Java 7 make the variable final //if you are using Java 8 the code runs successfully int sum = 20; //declaring method local inner class class InnerClass { public int divisor; public int remainder; public InnerClass() { divisor = 4; remainder = sum%divisor; } private int getDivisor() { return divisor; } private int getRemainder() { return sum%divisor; } private int getQuotient() { System.out.println('We are inside the inner class'); return sum / divisor; } } //creating an instance of inner class InnerClass ic = new InnerClass(); System.out.println('Divisor = '+ ic.getDivisor()); System.out.println('Remainder = ' + ic.getRemainder()); System.out.println('Quotient = ' + ic.getQuotient()); } public static void main(String[] args) { //creating an instance of outer class OuterClass oc = new OuterClass(); oc.getValue(); } } 

산출:

 Divisor = 4 Remainder = 0 We are inside the inner class Quotient = 5 

익명 내부 클래스

로컬 클래스와 동일한 내부 클래스 유형이지만, 클래스 이름이 없고 해당 클래스에 대해 단일 객체가 생성된다는 점만 다릅니다. 코드를 더욱 간결하게 만듭니다. 로컬 클래스를 한 번 사용하고 싶을 때 사용됩니다. 다음 두 가지 방법으로 익명 클래스를 만들 수 있습니다.

  • 인터페이스를 사용하여
  • 클래스를 구체적이고 추상적으로 선언함으로써

통사론:

 // the class may an interface, abstract or concrete class DemoClass obj = new DemoClass() { //methods //data members public void demomethod() { //statements } }; 

위의 구문을 보면 클래스에 블록에 정의가 포함되어 있다는 점을 제외하면 생성자의 호출과 동일하다는 것을 알 수 있습니다.

AnonymousClassExample.java

 interface Score { int run = 321; void getScore(); } public class AnonymousClassExample { public static void main(String[] args) { // Myclass is hidden inner class of Score interface // whose name is not written but an object to it // is created. Score s = new Score() { @Override public void getScore() { //prints score System.out.print('Score is '+run); } }; s.getScore(); } } 

산출:

 Score is 321 

Java는 래퍼 클래스라는 또 다른 유형의 Java 클래스도 제공합니다. 자세히 논의해 봅시다.

래퍼 클래스

자바에서는 용어 래퍼 클래스 Java의 기본 유형을 객체화하는 Java 클래스 모음을 나타냅니다. 이는 각 기본 유형에 해당하는 래퍼 클래스가 있음을 의미합니다. 래퍼 클래스는 기본 유형에서 객체로 또는 그 반대로 변환을 수행하는 데 사용됩니다. 다음 그림은 래퍼 클래스 계층 구조를 보여줍니다.

Java의 클래스 유형

다음 표는 기본 유형과 해당 래퍼 클래스를 나타냅니다.

기본 유형 래퍼 클래스
부울 부울
정수 정수
성격
더블 더블
뜨다 뜨다
바이트 바이트
짧은 짧은

Java 프로그램을 통해 Wrapper 클래스를 이해해보자.

WrapperClassExample.java

 public class WrapperClassExample { public static void main(String args[]) { byte x = 0; //wrapping byte primitive type into Byte object Byte byteobj = new Byte(x); int y = 23; //wrapping int primitive type into Integer object Integer intobj = new Integer(y); char c='m'; //wrapping char primitive type into Character object Character charobj=c; //printing values from objects System.out.println('Byte object byteobj: ' + byteobj); System.out.println('Integer object intobj: ' + intobj); System.out.println('Character object charobj: ' + charobj); } } 

산출:

 Byte object byteobj: 0 Integer object intobj: 23 Character object charobj: m