Java의 "추상" 클래스 및 메소드 사용 방법
Abstraction
캡슐화 및 상속과 함께 객체 지향 프로그래밍의 세 가지 핵심 원칙 중 하나입니다.
추상화는 프로그램의 복잡성을 줄이고 코드를 읽기 쉽게 만드는 한 가지 방법입니다. Java에서 추상화를 사용하면 다음을 수행할 수 있습니다.
- 클래스의 특정 세부정보만 표시하고
- 해당 클래스의 다른 모든 세부정보를 숨깁니다.
추상화는 Java의 클래스와 메소드 모두에 적용할 수 있습니다.
이 튜토리얼에서는 자바 추상화의 기본, 추상 클래스 사용 방법, 추상 메소드 사용 방법에 대해 설명합니다. 또한 이 중요한 개념을 더 잘 이해할 수 있도록 몇 가지 예를 살펴보겠습니다.
자바 추상화
객체 지향 프로그래밍은 객체와 클래스를 사용하여 데이터와 메서드를 나타내는 프로그래밍 유형입니다. 개체와 클래스를 사용하면 코드의 반복을 줄이고 프로그램을 보다 효율적으로 만들 수 있습니다.
Java는 객체 지향 프로그래밍 언어입니다. 따라서 개체 및 클래스 작업에 사용되는 여러 기능이 포함되어 있습니다. 추상화는 이러한 기능 중 하나입니다. 추상화를 사용하면 Java의 클래스에 특정 정보만 표시할 수 있습니다.
Java에서 추상화가 사용되는 두 가지 경우가 있습니다. 클래스와 메서드입니다.
자바 추상 클래스
Java에서 추상 클래스는 객체를 생성할 수 없는 클래스입니다. 즉, 추상 클래스는 인스턴스화할 수 없습니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
Java에서 추상 클래스를 생성하려면 abstract 키워드를 사용할 수 있습니다. 다음은 Java의 추상 클래스 예입니다.
abstract class BankAccount { // Code here }
이것은 추상 클래스이기 때문에 이 클래스를 사용하여 객체를 만들려고 하면 프로그램에서 오류를 반환합니다.
예를 들어 BankAccount라는 클래스의 인스턴스를 생성하려고 한다고 가정합니다. 이 인스턴스를 lucyAccount라고 부르고 Lucy의 은행 정보를 저장하기를 원합니다. Lucy는 고객 중 한 명입니다. 다음 코드를 사용하여 이 인스턴스를 생성하려고 합니다.
BankAccount lucyAccount = new BankAccount();
그러나 이 코드를 실행하면 프로그램에서 다음을 반환합니다.
BankAccount is abstract; cannot be instantiated
보시다시피 추상 클래스를 개체에 할당할 수 없습니다.
그러나 여전히 추상 클래스에서 하위 클래스를 만들 수 있습니다. 다음 섹션에서는 추상 클래스에서 하위 클래스를 만드는 방법에 대해 설명합니다.
추상 클래스 상속
언급했듯이 객체에 추상 클래스를 할당할 수 없습니다. 따라서 추상 클래스의 내용, 즉 해당 클래스와 관련된 속성 및 메서드에 액세스하려면 inherit
해야 합니다. 수업.
은행의 은행 계좌 정보를 저장하는 프로그램을 생성한다고 가정합니다. 우리 프로그램에는 BankAccount와 CheckingAccount의 두 가지 클래스가 포함됩니다. BankAccount는 은행 계좌 작업을 위한 속성과 메소드를 저장하는 상위 클래스입니다. CheckingAccount는 이러한 메서드를 상속하는 자식 클래스가 됩니다.
이 예에서 BankAccount는 추상 클래스입니다. 당좌 예금 계좌를 만드는 데만 사용하고 싶습니다.
다음은 BankAccount 및 CheckingAccount 클래스를 사용하는 데 사용할 수 있는 코드입니다.
abstract class BankAccount { public void viewAccountNumber() { System.out.println("Account number: #1932042"); } } class CheckingAccount extends BankAccount { } class Main { public static void main(String[] args) { CheckingAccount lucyAccount = new CheckingAccount(); lucyAccount.viewAccountNumber(); } }
코드 반환:
Account number: #1932042
이 예에서는 세 개의 클래스를 만들었습니다.
- 은행 계좌 . 이것은 추상 클래스입니다.
viewAccountNumber()
라는 메서드가 포함되어 있습니다. . BankAccount는 추상 클래스이기 때문에 클래스의 객체를 생성할 수 없습니다. - 계정 확인 . 이것은 어린이 수업입니다. 자식 클래스로서 BankAccount 클래스의 속성과 메서드를 상속합니다.
- 메인 . 이 클래스에는 메인 프로그램에 대한 코드가 포함되어 있습니다.
주 프로그램에서 CheckingAccount 클래스의 인스턴스를 만들고 lucyAccount라고 부릅니다. lucyAccount는 객체입니다. 우리 프로그램에서 세 개의 클래스를 만든 후 viewAccountNumber()
메서드에서 lucyAccount 개체를 사용했습니다. .
다음 표에는 이 예의 주요 부분이 요약되어 있습니다.
NAME | 유형 | 설명 |
은행 계좌 | 추상/상위 클래스 | 은행 계좌 작업을 위한 속성과 메소드를 저장합니다. |
계정 확인 | 하위 클래스 | 상위 클래스의 메소드를 상속합니다. |
메인 | 클래스 | 메인 프로그램에 대한 코드를 포함합니다. |
lucyAccount | 객체 | 우리 프로그램의 실제 적용 |
Java 상속에 대해 자세히 알아보려면 여기에서 전체 가이드를 읽어보세요.
자바 추상 메소드
클래스 외에 메서드도 추상화할 수 있습니다.
추상 메서드를 선언할 때 위와 동일한 추상 키워드를 사용합니다. 내용을 지정하지 않고 추상 클래스 내에서만 추상 메서드를 선언할 수 있습니다.
다음은 Java의 추상 메서드 예입니다.
abstract void checkBalance();
이 예에서는 checkBalance()
라는 추상 메서드를 만들었습니다. . 이 메서드에는 본문이 없습니다. 즉, 메서드와 연결된 코드가 없습니다.
이전의 은행 사례로 돌아가 보겠습니다. 그 프로그램은 추상 메소드를 포함합니다:lucyAccount.viewAccountNumber();
.
우리는 우리 프로그램이 고객의 은행 계좌 번호를 표시할 수 있도록 이 추상적인 방법을 사용했습니다. 위의 예(이전 섹션에서)에서 BankAccount 상위 클래스는 하위 클래스에 대한 일종의 템플릿 역할을 합니다.
이 경우 자식 클래스는 다른 종류의 은행 계좌입니다. 이는 고객이 두 가지 이상의 은행 계좌를 갖고 있을 수 있고 우리는 각 종류의 계좌에서 동일한 기능을 수행하기를 원할 수 있기 때문입니다. 위에서 만든 자식 클래스는 CheckingAccount입니다.
위의 예에서 고객으로 돌아가 보겠습니다. Lucy는 당좌 예금 계좌가 있지만 저축 계좌와 중개 계좌도 있을 수 있습니다. Lucy의 각 계정에 대한 계정 번호를 표시할 수 있기를 원합니다. 이 두 가지 추가 계정 유형에 대한 하위 클래스를 생성하여 이를 수행할 수 있습니다. SavingsAccount, BrokerageAccount라고 부를 수 있습니다.
BankAccount 상위 클래스를 만들었기 때문에 세 가지 계정 유형 모두에 대한 계정 번호를 최소한의 코드 반복으로 효율적으로 표시할 수 있습니다.
아래 코드에서는 abstract 키워드를 두 번 사용합니다. 먼저 추상 클래스(BankAccount)를 선언합니다. 그런 다음 나중에 프로그램이 고객의 계정 번호를 표시하도록 지시하는 데 도움이 되는 추상 메서드를 선언합니다. 해당 추상 메서드 선언은 다음과 같습니다. abstract void viewAccountNumber();
. 그런 다음 viewAccountNumber()
를 초기화합니다. CheckingAccount 자식 클래스의 메서드입니다. 코드는 다음과 같습니다.
abstract class BankAccount { abstract void viewAccountNumber(); } class CheckingAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Checking account number: #1932042"); } } class Main { public static void main(String[] args) { CheckingAccount lucyAccount = new CheckingAccount(); lucyAccount.viewAccountNumber(); } }
코드 반환:
Checking account number: #1932042
이 예제는 이전 예제와 동일한 출력을 반환하지만 주의해야 할 몇 가지 코드 차이점이 있습니다. 그들은:
- 추상 메소드 선언. 여기 예제에서는 BankAccount라는 추상 클래스를 선언합니다. 이 클래스에는
viewAccountNumber()
라는 추상 메서드가 포함되어 있습니다. . - 추상 메소드의 확장 CheckingAccount 클래스를 통해 BankAccount 클래스를 확장합니다. CheckingAccount 클래스는 BankAccount 메서드에 저장된 값을 상속합니다.
CheckingAccount 클래스에서 viewAccountNumber()
라는 메서드를 정의합니다. —CheckingAccount 개체에만 액세스할 수 있습니다. 그런 다음 고객의 계좌 번호를 보기 위해 CheckingAccount 개체를 만듭니다.
자바 추상화 예
이제 Java 추상 클래스와 추상 메소드에 대해 논의했으므로 Java에서 추상화의 전체 예를 탐색할 수 있습니다. 이를 위해 위의 은행 계좌 예에서 논의한 모든 것을 통합할 것입니다.
당좌예금과 저축예금이라는 두 가지 유형의 은행 계좌를 제공하는 은행을 운영하고 있다고 가정합니다. 우리는 은행 계좌 소유자가 계좌 번호를 확인할 수 있는 프로그램을 작성하기로 결정했습니다.
저희 은행에서는 은행계좌가 당좌예금일 경우 계좌번호는 고객의 주민등록번호로 시작하여 555로 끝납니다. 예금일 경우에는 777로 끝납니다.
다음 코드를 사용하여 이 프로그램을 만들 수 있습니다.
abstract class BankAccount { abstract void viewAccountNumber(); } class CheckingAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Checking account number: #1932042555"); } } class SavingsAccount extends BankAccount { public void viewAccountNumber() { System.out.println("Savings account number: #1932042777"); } } class Main { public static void main(String[] args) { CheckingAccount ellieCheckingAccount = new CheckingAccount(); ellieCheckingAccount.viewAccountNumber() SavingsAccount ellieSavingsAccount = new SavingsAccount(); ellieSavingsAccount.viewAccountNumber(); } }
코드 반환:
Checking account number: #1932042555 Savings account number: #1932042777
이 예에서는 클래스를 만들고 BankAccount라고 이름을 지정했습니다. 이 클래스에는 viewAccountNumber()
라는 하나의 추상 메서드가 있습니다. .
계정 유형마다 계정 번호를 다르게 할당하므로 viewAccountNumber()
를 구현할 수 없습니다. BankAccount 클래스의 메소드 대신 BankAccount 클래스의 각 하위 클래스는 viewAccountNumber()
를 구현합니다. 방법.
이 예에서 CheckingAccount 클래스는 고객 ID로 시작하고 555로 끝나는 번호로 계좌 번호를 할당합니다. SavingsAccount 클래스는 고객 ID로 시작하고 777로 끝나는 번호로 계좌 번호를 할당합니다.
우리 코드에서는 Ellie라는 고객에 대한 CheckingAccount 클래스의 인스턴스를 초기화합니다. 이 인스턴스에는 ellieCheckingAccount라는 이름이 할당되고 viewAccountNumber()
를 호출합니다. 계좌번호 조회 방법입니다. 이것은 다음을 반환합니다:
Checking account number: #1932042555
또한 ellieSavingsAccount라는 SavingsAccount 클래스의 인스턴스를 초기화하고 viewAccountNumber()
를 호출합니다. 계좌번호 조회 방법입니다. 이것은 다음을 반환합니다:
Savings account number: #1932042777
결론
Abstraction
객체 지향 프로그래밍의 중요한 기능입니다. 클래스나 메서드에서 특정 세부 정보를 숨기고 필수 정보만 표시할 수 있습니다. 자바에서 추상 클래스와 메소드를 생성하려면 abstract
를 사용하세요. 키워드.
이 튜토리얼에서는 추상화 작동 방식, 추상화가 유용한 이유, Java에서 추상 메소드 및 클래스를 생성하는 방법을 예제와 함께 설명했습니다. 이제 전문 프로그래머처럼 Java로 추상 클래스와 메소드 작업을 시작할 준비가 되었습니다!