안녕하세요! 이번 강좌에서는 자바를 활용한 안드로이드 앱 개발에서 중요한 개념 중 하나인 ‘상속’에 대해 자세히 살펴보겠습니다. 상속은 객체지향 프로그래밍의 핵심 요소로, 코드 재사용성을 높이고 계층적인 관계를 표현하는 데 큰 도움이 됩니다. 이 강좌에서는 상속의 개념, 사용 방법, 그리고 안드로이드에서의 실질적인 예제를 포괄적으로 다룰 것입니다.
1. 상속이란?
상속은 객체지향 프로그래밍에서 한 클래스가 다른 클래스의 특성과 기능을 물려받는 것을 의미합니다. 이를 통해 우리는 새로운 클래스를 정의할 때 기존 클래스의 코드와 기능을 재사용할 수 있으며, 코드의 중복을 줄이고 유지보수를 용이하게 합니다.
2. 상속의 기본 구조
자바에서 클래스를 상속하기 위해서는 ‘extends’ 키워드를 사용합니다. 부모 클래스(상위 클래스)로부터 특성을 물려받은 자식 클래스(하위 클래스)는 자신만의 추가적인 필드와 메서드를 가질 수 있습니다. 기본적인 상속 구조는 다음과 같은 형식을 가집니다:
class ParentClass {
// 부모 클래스의 필드와 메서드
}
class ChildClass extends ParentClass {
// 자식 클래스의 추가 필드와 메서드
}
3. 상속의 장점
- 코드 재사용성: 기존 클래스를 재사용함으로써 새로운 클래스를 쉽게 만들 수 있습니다.
- 유지보수 용이성: 공통 기능을 부모 클래스에 두고 수정하는 것으로 자식 클래스의 동작을 변경할 수 있습니다.
- 가독성: 클래스 간의 관계를 명확하게 표현할 수 있어 코드의 가독성이 높아집니다.
4. 상속의 예제
이번에는 간단한 안드로이드 앱을 만들어보며 상속의 구조를 시연해 보겠습니다. 가상의 앱에서는 기본 ‘사용자(User)’ 클래스를 만들고, 이를 상속받는 ‘관리자(Admin)’ 클래스와 ‘일반 사용자(RegularUser)’ 클래스를 만들 것입니다.
4.1 사용자 클래스 생성
public class User {
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public void displayInfo() {
System.out.println("Name: " + name + ", Email: " + email);
}
}
4.2 관리자 클래스 생성
public class Admin extends User {
private String department;
public Admin(String name, String email, String department) {
super(name, email); // 부모 클래스의 생성자 호출
this.department = department;
}
public String getDepartment() {
return department;
}
@Override
public void displayInfo() {
super.displayInfo(); // 부모의 메서드 호출
System.out.println("Department: " + department);
}
}
4.3 일반 사용자 클래스 생성
public class RegularUser extends User {
private String username;
public RegularUser(String name, String email, String username) {
super(name, email);
this.username = username;
}
public String getUsername() {
return username;
}
@Override
public void displayInfo() {
super.displayInfo();
System.out.println("Username: " + username);
}
}
5. 안드로이드 앱에서의 상속 사용
안드로이드 애플리케이션은 종종 여러 클래스에서 발생하는 일반적인 동작을 추상화하여 구현합니다. 예를 들어, 여러 액티비티가 공통의 행동을 수행해야 할 경우, 상위 액티비티 클래스를 만들고 이를 상속하여 사용할 수 있습니다.
5.1 기본 액티비티 클래스 생성
public class BaseActivity extends AppCompatActivity {
protected void setContentViewWithToolbar(int layoutId) {
setContentView(layoutId);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
}
5.2 사용자 관리 액티비티 생성
public class UserManagementActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentViewWithToolbar(R.layout.activity_user_management);
// 사용자 관리 관련 초기화 작업
}
}
5.3 설정 액티비티 생성
public class SettingsActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentViewWithToolbar(R.layout.activity_settings);
// 설정 관련 초기화 작업
}
}
6. 상속과 다형성
상속은 다형성을 지원합니다. 자바에서는 부모 클래스 타입의 변수를 사용하여 자식 클래스의 객체를 참조할 수 있습니다. это позволяет использовать объекты подклассов, как если бы это были объекты суперклассов.
public void displayUserInfo(User user) {
user.displayInfo(); // 다형성 예제
}
7. 결론
오늘은 자바를 활용한 안드로이드 앱 개발에서의 상속에 대해 배워보았습니다. 상속을 통해 코드의 재사용성을 높이고, 구조적인 설계를 가능하게 하는 방법을 이해하게 되었길 바랍니다. 소프트웨어 개발에서 상속은 매우 필수적인 부분이며, 이를 잘 활용하면 더욱 효율적인 코드 작성이 가능합니다. 다음 시간에는 추상 클래스와 인터페이스에 대해 다뤄보겠습니다. 감사합니다!