Java의 추상화 사용자에게 꼭 필요한 세부정보/기능만을 보여주는 과정입니다. 필수적이지 않은 구현 세부정보는 사용자에게 표시되지 않습니다.
이번 글에서는 추상화와 추상화의 의미에 대해 알아보겠습니다.
추상화를 이해하기 위한 간단한 예:
텔레비전 리모콘 우수하다 추상화의 예 . 간단한 버튼과 기호 뒤에 복잡성을 숨겨 TV 작동 방식에 대한 기술적 세부 사항을 이해할 필요 없이 쉽게 TV와의 상호 작용을 단순화합니다.
Java의 추상화란 무엇입니까?
Java에서는 추상화를 다음과 같이 수행합니다. 인터페이스 그리고 추상 수업 . 인터페이스를 사용하면 100% 추상화를 달성할 수 있습니다.
데이터 추상화는 관련 없는 세부 사항은 무시하고 객체의 필수 특성만 식별하는 프로세스로 정의될 수도 있습니다. 객체의 속성과 동작은 유사한 유형의 다른 객체와 구별되며 객체를 분류/그룹화하는 데도 도움이 됩니다.
추상화 실제 사례:
자동차를 운전하는 남자의 실제 사례를 생각해 보십시오. 남자는 가속 페달을 밟으면 자동차의 속도가 빨라지고 브레이크를 밟으면 차가 멈출 것이라는 것만 알지만, 가속 페달을 밟으면 실제로 속도가 어떻게 증가하는지 모르고 자동차의 내부 메커니즘에 대해서도 알지 못합니다. 또는 자동차의 가속기, 브레이크 등의 구현. 이것이 바로 추상화입니다.
Java 추상 클래스 및 Java 추상 메소드
- 추상 클래스는 추상 키워드로 선언된 클래스입니다.
- 추상 메서드는 구현 없이 선언되는 메서드입니다.
- 추상 클래스는 모든 추상 메소드를 가질 수도 있고 그렇지 않을 수도 있습니다. 그 중 일부는 구체적인 방법이 될 수 있습니다.
- 메서드 정의 추상은 항상 하위 클래스에서 재정의되어야 합니다. 재정의 필수이거나 하위 클래스 자체를 추상화합니다.
- 하나 이상의 추상 메소드를 포함하는 모든 클래스도 추상 키워드를 사용하여 선언해야 합니다.
- 추상 클래스의 객체는 있을 수 없습니다. 즉, 추상 클래스는 직접 인스턴스화할 수 없습니다. 새로운 운영자 .
- 추상 클래스는 매개변수화된 생성자를 가질 수 있으며 기본 생성자는 항상 추상 클래스에 존재합니다.
Java에서 추상화를 구현하는 알고리즘
- 추상화의 일부가 될 클래스나 인터페이스를 결정합니다.
- 이러한 클래스의 일반적인 동작과 속성을 정의하는 추상 클래스 또는 인터페이스를 만듭니다.
- 구현 세부 정보가 없는 추상 클래스 또는 인터페이스 내에서 추상 메서드를 정의합니다.
- 추상 클래스를 확장하거나 인터페이스를 구현하는 구체적인 클래스를 구현합니다.
- 구체적인 구현을 제공하려면 구체적인 클래스의 추상 메서드를 재정의하세요.
- 구체적인 클래스를 사용하여 프로그램 논리를 구현합니다.
추상 클래스와 추상 메서드는 언제 사용합니까?
모든 메소드의 완전한 구현을 제공하지 않고 주어진 추상화의 구조를 선언하는 슈퍼클래스를 정의하려는 상황이 있습니다. 때때로 우리는 모든 서브클래스가 공유할 일반화 형식만 정의하는 슈퍼클래스를 생성하고 세부사항을 각 서브클래스에 남겨두기를 원할 것입니다.
컴퓨터 지원 설계 시스템이나 게임 시뮬레이션에 사용되는 고전적인 모양의 예를 생각해 보세요. 기본 유형은 모양이며 각 모양에는 색상, 크기 등이 있습니다. 여기에서 특정 유형의 모양(원, 사각형, 삼각형 등)이 파생(상속)됩니다. 각 모양은 추가 특성과 동작을 가질 수 있습니다. 예를 들어 특정 모양을 뒤집을 수 있습니다. 도형의 면적을 계산하려는 경우와 같이 일부 동작은 다를 수 있습니다. 유형 계층 구조는 모양 간의 유사점과 차이점을 모두 구현합니다.
Java의 추상 클래스
Java 추상화 예
예시 1:
자바
배우 레카
// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> >String color;> > >// these are abstract methods> >abstract> double> area();> >public> abstract> String toString();> > >// abstract class can have the constructor> >public> Shape(String color)> >{> >System.out.println(>'Shape constructor called'>);> >this>.color = color;> >}> > >// this is a concrete method> >public> String getColor() {>return> color; }> }> class> Circle>extends> Shape {> >double> radius;> > >public> Circle(String color,>double> radius)> >{> > >// calling Shape constructor> >super>(color);> >System.out.println(>'Circle constructor called'>);> >this>.radius = radius;> >}> > >@Override> double> area()> >{> >return> Math.PI * Math.pow(radius,>2>);> >}> > >@Override> public> String toString()> >{> >return> 'Circle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> class> Rectangle>extends> Shape {> > >double> length;> >double> width;> > >public> Rectangle(String color,>double> length,> >double> width)> >{> >// calling Shape constructor> >super>(color);> >System.out.println(>'Rectangle constructor called'>);> >this>.length = length;> >this>.width = width;> >}> > >@Override> double> area() {>return> length * width; }> > >@Override> public> String toString()> >{> >return> 'Rectangle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> public> class> Test {> >public> static> void> main(String[] args)> >{> >Shape s1 =>new> Circle(>'Red'>,>2.2>);> >Shape s2 =>new> Rectangle(>'Yellow'>,>2>,>4>);> > >System.out.println(s1.toString());> >System.out.println(s2.toString());> >}> }> |
>
세상 최고의 미소
>산출
Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>
예시 2:
자바
// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> >private> String name;> > >public> Animal(String name) {>this>.name = name; }> > >public> abstract> void> makeSound();> > >public> String getName() {>return> name; }> }> > // Abstracted class> class> Dog>extends> Animal {> >public> Dog(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' barks'>);> >}> }> > // Abstracted class> class> Cat>extends> Animal {> >public> Cat(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' meows'>);> >}> }> > // Driver Class> public> class> AbstractionExample {> >// Main Function> >public> static> void> main(String[] args)> >{> >Animal myDog =>new> Dog(>'Buddy'>);> >Animal myCat =>new> Cat(>'Fluffy'>);> > >myDog.makeSound();> >myCat.makeSound();> >}> }> |
>
>
df.loc산출
Buddy barks Fluffy meows>
위의 Java 프로그램에 대한 설명:
이 코드는 추상 메서드 makeSound()를 사용하여 Animal 추상 클래스를 정의합니다. Dog 및 Cat 클래스는 Animal을 확장하고 makeSound() 메서드를 구현합니다. main() 메서드는 Dog 및 Cat의 인스턴스를 만들고 해당 인스턴스에서 makeSound() 메서드를 호출합니다.
이는 클래스(이 경우 Animal)에 대한 템플릿을 정의하지만 특정 메서드의 구현은 하위 클래스(이 경우 makeSound())에 의해 정의되도록 남겨 두는 Java의 추상화 개념을 보여줍니다.
상호 작용
인터페이스는 Java에서 추상화를 구현하는 또 다른 방법입니다. 주요 차이점은 인터페이스를 사용하면 Java 클래스에서 100% 추상화를 달성할 수 있다는 것입니다. Java 또는 기타 언어의 인터페이스에는 메소드와 변수가 모두 포함되어 있지만 메소드 본문은 없습니다. 추상화 외에도 인터페이스를 사용하여 Java에서 인터페이스를 구현할 수도 있습니다.
구현: 구현하려면 상호 작용 우리는 키워드를 사용합니다 클래스로 구현합니다.
자바
// Define an interface named Shape> interface> Shape {> >double> calculateArea();>// Abstract method for> >// calculating the area> }> > // Implement the interface in a class named Circle> class> Circle>implements> Shape {> >private> double> radius;> > >// Constructor for Circle> >public> Circle(>double> radius) {>this>.radius = radius; }> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea()> >{> >return> Math.PI * radius * radius;> >}> }> > // Implement the interface in a class named Rectangle> class> Rectangle>implements> Shape {> >private> double> length;> >private> double> width;> > >// Constructor for Rectangle> >public> Rectangle(>double> length,>double> width)> >{> >this>.length = length;> >this>.width = width;> >}> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea() {>return> length * width; }> }> > // Main class to test the program> public> class> Main {> >public> static> void> main(String[] args)> >{> >// Creating instances of Circle and Rectangle> >Circle myCircle =>new> Circle(>5.0>);> >Rectangle myRectangle =>new> Rectangle(>4.0>,>6.0>);> > >// Calculating and printing the areas> >System.out.println(>'Area of Circle: '> >+ myCircle.calculateArea());> >System.out.println(>'Area of Rectangle: '> >+ myRectangle.calculateArea());> >}> }> |
>
>산출
Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>
추상화의 장점
추상화의 장점은 다음과 같습니다.
- 사물을 보는 복잡성을 줄여줍니다.
- 코드 중복을 방지하고 재사용성을 높입니다.
- 사용자에게 필수 세부 정보만 제공되므로 애플리케이션이나 프로그램의 보안을 강화하는 데 도움이 됩니다.
- 이는 애플리케이션의 유지 관리성을 향상시킵니다.
- 이는 애플리케이션의 모듈성을 향상시킵니다.
- 최종 사용자에게 영향을 주지 않고 내부 시스템에서 어떤 유형의 변경도 수행할 수 있으므로 개선이 매우 쉬워질 것입니다.
- 코드 재사용성과 유지 관리성이 향상됩니다.
- 구현 세부정보를 숨기고 관련 정보만 노출합니다.
- 사용자에게 명확하고 간단한 인터페이스를 제공합니다.
- 내부 클래스 세부정보에 대한 액세스를 방지하여 보안을 강화합니다.
- 복잡한 시스템을 더 작고 관리하기 쉬운 부분으로 나눌 수 있으므로 모듈성을 지원합니다.
- 추상화는 구현 세부 사항의 복잡성을 사용자에게 숨기는 방법을 제공하여 이해하고 사용하기 쉽게 만듭니다.
- 추상화를 사용하면 사용자 인터페이스에 영향을 주지 않고 기본 구현 세부 사항을 변경할 수 있으므로 프로그램 구현에 유연성이 있습니다.
- 추상화를 사용하면 모듈화 및 문제 분리가 가능해 코드를 더 유지 관리하기 쉽고 디버깅하기가 더 쉽습니다.
Java 추상화의 단점
Java 추상화의 주요 단점은 다음과 같습니다.
- 추상화로 인해 시스템 작동 방식을 이해하기가 더 어려워질 수 있습니다.
- 특히 제대로 사용하지 않으면 복잡성이 증가할 수 있습니다.
- 이는 구현의 유연성을 제한할 수 있습니다.
- 추상화를 적절하게 사용하지 않으면 코드에 불필요한 복잡성이 추가되어 개발 시간과 노력이 늘어날 수 있습니다.
- 추상화는 특히 추상화 계층과 구현 세부 사항에 익숙하지 않은 사람들의 경우 코드를 디버깅하고 이해하는 것을 더 어렵게 만들 수 있습니다.
- 추상화를 과도하게 사용하면 추가 코드 계층과 간접 참조로 인해 성능이 저하될 수 있습니다.
또한 읽어보세요:
- Java의 인터페이스
- Java의 추상 클래스
- 추상 클래스와 인터페이스의 차이점
- Java의 추상 키워드
Java의 추상화 – FAQ
Q1. 왜 초록을 사용하나요?
우리가 추상적 개념을 사용하는 주요 이유 중 하나는 복잡성을 단순화하기 위한 것입니다. 모든 원자와 별을 가지고 우주 전체를 설명하려고 한다고 상상해보세요! 초록을 사용하면 축소하여 중력 및 에너지와 같은 주요 아이디어를 파악하고 세부 사항에 얽매이지 않고 모든 것을 이해할 수 있습니다.
Java에서 abstract를 사용하는 몇 가지 다른 이유는 다음과 같습니다.
리눅스 명령1. 추상화 : 추상 클래스는 다른 클래스가 따라야 할 일반 템플릿을 정의하는 데 사용됩니다. 이는 하위 클래스가 따라야 하는 일련의 규칙과 지침을 정의합니다. 추상 클래스를 제공함으로써 이를 확장하는 클래스가 일관된 구조와 동작을 갖도록 보장할 수 있습니다. 이렇게 하면 코드가 더 체계화되고 유지 관리가 더 쉬워집니다.
2. 다형성 : 추상 클래스와 메소드는 Java에서 다형성을 가능하게 합니다. 다형성은 객체가 다양한 형태를 취할 수 있는 능력입니다. 이는 추상 유형의 변수가 해당 추상 클래스의 구체적인 하위 클래스 객체를 보유할 수 있음을 의미합니다. 이를 통해 코드가 더욱 유연해지고 다양한 상황에 적응할 수 있게 됩니다.
3. 프레임워크 및 API: Java에는 추상 클래스를 사용하는 수많은 프레임워크와 API가 있습니다. 추상 클래스를 사용하면 개발자는 기존 코드를 기반으로 구축하고 애플리케이션 관련 측면에 집중함으로써 시간과 노력을 절약할 수 있습니다.
Q2. 차이점은 무엇입니까? 캡슐화와 데이터 추상화?
캡슐화와 추상화의 주요 차이점은 다음과 같습니다.
캡슐화
추출
캡슐화는 데이터 은닉(정보 은닉)이다. 추상화는 세부 숨기기(구현 숨기기)입니다. 캡슐화는 데이터와 데이터에 작용하는 메서드를 그룹화합니다. 데이터 추상화는 사용자에게 인터페이스를 노출하고 구현 세부 사항을 숨기는 작업을 처리합니다. 캡슐화된 클래스는 데이터 숨기기 및 추상화를 따르는 Java 클래스입니다. 추상화 구현은 추상 클래스와 인터페이스를 사용하여 수행됩니다. 캡슐화는 구현 수준에서 발생하는 절차입니다. 추상화는 디자인 수준 프로세스입니다.
Q3. 데이터 추상화의 실제 사례는 무엇입니까?
텔레비전 리모콘 추상화의 훌륭한 실제 사례입니다. 간단한 버튼과 기호 뒤에 복잡성을 숨겨 TV 작동 방식에 대한 기술적 세부 사항을 이해할 필요 없이 쉽게 TV와의 상호 작용을 단순화합니다.
Q4. Java에서 추상 클래스와 인터페이스의 차이점은 무엇입니까?
다음은 Java의 추상 클래스 및 인터페이스와 관련된 몇 가지 주요 차이점입니다.
추상 클래스
빈에서 bcd로인터페이스
추상 클래스는 추상 및 비추상 메서드를 지원합니다. 인터페이스 지원에는 추상 메소드만 있습니다. 다중 상속을 지원하지 않습니다 다중 상속 지원 추상 클래스는 Java 클래스 및 여러 인터페이스로 확장 가능 인터페이스는 Java 인터페이스로만 확장할 수 있습니다. Java의 추상 클래스 멤버는 비공개, 보호 등이 될 수 있습니다. 인터페이스는 기본적으로 공개됩니다. 예:
공개 추상 클래스 Vechicle{
공개 추상 무효 드라이브()
}예:
공개 인터페이스 동물{
무효 말하기();
}