반응형

프로그래밍 기술/안드로이드 44

[안드로이드] 44. Java 다형성 개요

[안드로이드] 44. Java 다형성 개요 상속은 형식을 확장성을 높이고 데이터 신뢰성을 높이는 OOP의 대표적인 특징입니다. 그리고 상속의 특징을 보다 효과적으로 살리기 위해 다형성을 제공합니다. 다형성은 같은 표현의 결과가 다양할 수 있다는 특징을 말합니다. Java 언어에서 제공하는 다형성은 크게 형식의 다형성과 메서드의 다형성이 있습니다. 형식의 다형성은 기반 형식의 변수로 파생 형식의 개체를 참조할 수 있다는 것입니다. 그리고 메서드의 다형성은 개체를 참조하는 변수로 메서드를 사용하면 참조하는 개체 형식에 정의한 메서드가 동작하는 것을 말합니다. 예를 들어 기반 형식으로 음악가가 있고 음악가 형식을 기반으로 파생한 형식으로 피아니스트, 드러머 등이 있을 때 음악가 형식의 변수로 파생한 형식의 개..

[안드로이드] 43. Java 접근 지정자 protected

[안드로이드] 43. Java 접근 지정자 protected 캡슐화를 설명할 때 멤버 필드의 가시성을 지정하는 접근 지정자 중에서 protected 에 관한 설명은 생략하고 상속을 다룰 때 다시 설명하기로 하였습니다. public으로 접근 지정하면 다른 형식에서도 접근할 수 있고 private으로 지정하면 해당 형식에서만 접근할 수 있다는 것은 캡슐화 과정에서 살펴보았습니다. protected로 지정한 멤버는 해당 형식과 이를 기반으로 파생한 형식에서는 접근할 수 있고 그 외의 형식에서는 접근할 수 없게 합니다. 예를 들어 음악가가 연주를 하면 연주 스킬이 향상하게 구현하고자 합니다. 그리고 음악가를 파생한 피아니스트에서 레슨을 받으면 마찬가지로 연주 스킬을 향상하게 구현한다고 가정합시다. 이 때 음악가..

[안드로이드] 42. Java 필드 재정의(override)

[안드로이드] 42. Java 필드 재정의(override) 만약 기반 클래스에 캡슐화한 멤버 필드와 같은 이름으로 파생 클래스에서 멤버 필드를 캡슐화하면 어떻게 될까요? 이 때도 기반 클래스에 캡슐화한 멤버 필드는 무효화하여 파생 형식에서는 직접적으로 사용할 수는 없습니다. 하지만 무효화한 메서드를 호출하여 사용하는 것처럼 super 키워드를 이용하면 무효화 멤버 필드를 사용할 수 있습니다. 실제 프로그래밍에서 메서드 재정의는 많은 곳에서 사용하지만 멤버 필드를 재정의는 개발자에게 혼돈만 가중시켜서 거의 사용하지 않습니다. 이에 관한 사항은 여러분께서 다양한 프로그래밍 과정을 통해 느끼고 판단할 수 있을 것입니다. 예를 들어 음악가의 멤버 필드에 음악가 이름을 name 멤버 필드로 캡슐화하고 음악가를 ..

[안드로이드] 41. Java 메서드 재정의(override)

[안드로이드] 41. Java 메서드 재정의(override) 상속은 비슷한 형식의 공통적인 부분을 기반 형식으로 정의하고 이를 파생하여 다른 부분을 추가하거나 변경하는 문법입니다. 만약 기반 형식을 정의할 때 제공할 메서드는 공통적으로 정의할 수 있지만 메서드 내부에 정의할 구체적 알고리즘이 다를 때는 어떻게 해야 할까요? 이를 위해 OOP 언어에서는 재정의에 관한 문법을 제공하고 있습니다. 재정의란 기반 형식에 정의한 메서드를 파생 형식에서 구체적 행위를 다르게 정의하는 문법으로 파생 클래스에서 재정의할 메서드 앞에 @Override 키워드를 명시하여 정의합니다. 이렇게 파생 클래스에서 기반 형식의 메서드를 재정의하면 기반 형식에 정의한 메서드 이름은 무효화합니다. public class Musici..

[안드로이드] 40. Java super 키워드를 이용한 기반 형식부분 생성

[안드로이드] 40. Java super 키워드를 이용한 기반 형식부분 생성 이처럼 기반 형식에서 확장하여 파생 클래스를 정의하면 파생 클래스 형식 개체를 생성하면 기반 형식부분을 생성한 후에 파생 형식부분을 생성하여 하나의 개체가 만들어집니다. 이러한 이유로 기반 형식에 매개 변수가 있는 생성자만 존재할 때 파생 클래스의 생성자에서는 기반 형식부분을 생성할 때 어떠한 인자를 전달하여 생성해야 하는지 반드시 명시해야 합니다. 이 때 super 키워드를 이용합니다. 이러한 이유로 Java 언어에서는 기반 클래스를 슈퍼 클래스라고도 부릅니다. 그리고 파생 클래스를 서브 클래스라고도 부릅니다. public class Musician { String name; public Musician(String name)..

[안드로이드] 39. OOP - 상속과 다형성 - 상속 개요

[안드로이드] 39. OOP - 상속과 다형성 - 상속 개요 이번에는 OOP의 특징 중에 상속과 다형성에 관하여 살펴봅시다. 상속과 다형성은 캡슐화와 더불어 OOP 언어의 주요 특징입니다. 상속은 유사한 클래스의 공통적인 부분을 기반 형식으로 정의하고 이를 파생하여 세부적인 사항을 추가 및 변경하여 파생 형식을 정의하는 방법입니다. 이러한 특징은 기반 형식을 확장하여 다양한 파생 클래스를 정의할 수 있게 해 줍니다. 그리고 다형성은 파생 형식 개체를 기반 형식의 변수로 참조할 수 있고 멤버 메서드를 호출하면 참조하는 형식의 메서드가 아닌 실제 개체의 메서드를 호출할 수 있게 하여 상속의 장점을 극대화시킵니다. 상속 개요 Java 언어에서는 여러 클래스의 공통점을 기반 클래스에 정의하고 파생 클래스를 정의..

[안드로이드] 38. Java 정적 멤버와 static 키워드

[안드로이드] 38. Java 정적 멤버와 static 키워드 클래스를 정의할 때 멤버 앞에 static 키워드를 명시할 수도 있으며 static 키워드를 명시하면 정적 멤버라고 부릅니다. static 키워드를 명시하지 않은 멤버 필드는 개체(인스턴스라고도 부름)마다 상태를 기억하기 위한 영역을 부여합니다. 하지만 static 키워드를 명시하면 멤버 필드를 캡슐화하면 해당 형식에 상태를 기억하기 위한 영역을 부여하며 정적 멤버 필드라고 부릅니다. 어떠한 곳에 정적 멤버 필드를 사용하는지 예를 들어 볼게요. Unit 클래스를 정의한다고 가정합시다. 그리고 Unit 개체마다 일련 번호가 있고 생성 순서대로 1부터 순차적으로 부여하려고 합니다. 이를 위해서는 가장 최근에 부여한 Unit 개체의 일련 번호를 기..

[안드로이드] 37. Java 생성자 중복정의, this, this()

[안드로이드] 37. Java 생성자 중복정의, this, this() 앞에서 설명한 것처럼 개체를 생성할 때는 new 키워드와 함께 생성할 개체 형식 명과 생성자 메서드의 입력 인자를 전달합니다. 특히 생성자 메서드는 다른 메서드처럼 메서드 중복 정의 대상이므로 생성에 필요한 인자 종류를 다르게 정의할 수 있습니다. 예를 들어 회원을 클래스로 정의하고 멤버 필드로 회원 아이디, 이름, 나이를 캡슐화한다고 가정합시다. 이 때 아이디만 입력 인자로 받는 생성자, 아이디와 이름을 입력 인자로 받는 생성자, 아이디와 이름과 나이를 입력 인자로 받는 생성자를 정의하여 필요에 따라 원하는 형태의 개체를 생성할 수 있다는 것입니다. 그리고 멤버 메서드 내부에서 입력 인자와 멤버 필드의 이름이 같을 때 this 키워..

[안드로이드] 36. Java 개체의 생과 사

개체의 생과 사 C언어나 C++언어에서는 동적으로 메모리를 할당하면 힙에 할당하고 개발자 코드에 의해 해제해야 합니다. 이에 반해 Java 언어에서는 개발자 코드에 의해 개체를 생성하지만 개발자 코드에 의해 개체를 소멸하지 않습니다. 이와 같이 개체의 생성은 개발자 코드에 의해 결정하고 소멸하는 코드를 작성하지 않는 이유는 Java 가상 머신의 관리화 힙(Managed Heap)에 개체를 할당하여 관리하기 때문입니다. Java에서 개체를 생성하면 관리화 힙(Managed Heap)에 할당합니다. 관리화 힙은 Java가상 머신에서 개체를 참조하는 변수의 개수를 카운팅하여 관리합니다. 그리고 가상 머신의 쓰레기 수집기(Gabage Collector)에 의해 관리화 힙의 개체를 참조하는 변수의 카운터가 0이 ..

[안드로이드] 35. Java 중복 정의(Overloading)

중복 정의(Overloading) Java 언어에서는 클래스의 멤버 메서드의 입력 매개 변수 리스트가 충분히 다르면 같은 이름으로 여러 개의 멤버 메서드를 정의할 수 있습니다. 이러한 특징을 메서드 중복 정의(Overloading)이라고 부릅니다. 예를 들어 원을 클래스로 정의합시다. 원 개체를 생성할 때는 반지름을 입력 인자로 생성하게 하고 면적을 구하는 메서드를 제공합시다. 만약 입력 인자를 전달하지 않으면 원의 넓이를 구하고 입력 인자로 각 정보를 전달하면 호의 면적을 구합니다. 이 때 입력 인자를 전달하지 않고 원의 넓이를 구하는 메서드와 각 정보를 전달하여 호의 면적을 구하는 메서드의 이름을 같은 이름으로 정의할 수 있습니다. public double calculateArea(){ return ..

반응형