안드로이드 개발 질문/답변
(글 수 45,052)
무턱대고 쓰고는 있지만
왜 써야 하며,
썻을 때 어떤 효과가 일어나는건지,
안쓰면 어떻게 되는건지를 알고 싶습니다.^^
전체 적인 개념과 세세한 용도를 배우고 싶습니다.^^
왜 써야 하며,
썻을 때 어떤 효과가 일어나는건지,
안쓰면 어떻게 되는건지를 알고 싶습니다.^^
전체 적인 개념과 세세한 용도를 배우고 싶습니다.^^
2010.02.04 23:24:14
C++에서 virtual 의 개념입니다. virtual의 기능은 은닉과 재정의 인데 자바에서는 재정의 로 사용을 합니다. interface 나 abstract 로 선언된 class들은 리모델링을 위한 class로서 사용자의 재정의를 필요로 하는 매소드를 포함 하고 있습니다. @Override 표시는 해도 되고 안해도 되는데 재정의를 했다는 표시가 더 확실하니 가급적이면 사용하는게 더 좋습니다. 아.. 그리고 재정의를 하지 않으면 에러가 발생이 되니 주의하시길 바랍니다 ㅋ
2010.02.04 23:33:25
제가 기본이 너무 안되어 있다는 것이 너무 와 다아서 우울하네요^^;;
설명을 해주셧 지만 그 설명이 어렵게 들리네요.......... 제 수준이 너무 낮다는걸 또 다시 실감하게 되는군요
열심히 공부해야 겠습니다^^!! 감사합니다.
2010.02.04 23:34:20
//라이더훈// 님
그러면 추상 클래스에서 구현 하면 ...... 어차피 서브 클래스에서 만들 필요가 없는건가요?
(추상 클래스)의 개념을 부탁드립니다.^^
그러면 추상 클래스에서 구현 하면 ...... 어차피 서브 클래스에서 만들 필요가 없는건가요?
(추상 클래스)의 개념을 부탁드립니다.^^
2010.02.04 23:37:13
//아즈라엘//
C++ 에서 virtual 이란 무엇인가요? 저는 잘 모르겠습니다.
가르쳐 주셧으면 좋겠습니다.^^
그리고 // 은닉과 재정의이 어떤 개념인가요??
재정의라는 것은 클래스를 abstract로 안 만들었을 때는 필수적으로 들어가야 하는 매소드 인데
일부러 추상 클래스로 만들어서 넣지 않고도 아무 이상이 없게 하기 위해서 우선 abstract로 class를 생성하고
나중에 @override 해서 쓰는건가요?
C++ 에서 virtual 이란 무엇인가요? 저는 잘 모르겠습니다.
가르쳐 주셧으면 좋겠습니다.^^
그리고 // 은닉과 재정의이 어떤 개념인가요??
재정의라는 것은 클래스를 abstract로 안 만들었을 때는 필수적으로 들어가야 하는 매소드 인데
일부러 추상 클래스로 만들어서 넣지 않고도 아무 이상이 없게 하기 위해서 우선 abstract로 class를 생성하고
나중에 @override 해서 쓰는건가요?
2010.02.04 23:45:31
상속관계에 있다보면.. 자식클래스는 (subclass) 부모의 자원을 쓸수 있고 부모클래스는 자식클래스의 매소드를 호출 할수있습니다. 만약 부모클래스와 자식클래스의 매소드 명칭이 똑같다면 우선순위는 자식클래스에 있습니다. 때론 여러 사람이 공동작업을 할때 공동으로 사용할 부모 클래스의 이름을 미리 약속하여 정해놓고 그이름대로 자식클래스에서 재정의 하여 리모델링 한다면.. 부모가 원하는 모델로 구상이 되어있기 때문에 자식클래스의 접근이 용이 하겠지요? 그래서 재정의가 안되면 error 를 발생하여 주의 하라는 경고를 주는겁니다.
2010.02.04 23:45:56
간단히 예를들어보죠 [오리]라는 클래스가 있다고 하겠습니다. 이[오리] 클래스는 [난다()]라는 메서를 가집니다. 이 [난다()]라는 메서드에는 오리가 1초에 6번 날개짓을 하는 코드가 기록되있다고 합시다.
여기서 [좀더빨리나는오리]를 만들고자 [오리]클래스를 상속받았다고 합시다. 그럼 좀더빨리날려면 1초에 7번이상 날개를 퍼덕거려야 되겠죠 이때 [난다()]메서드를 오버라이드를 통해 재정의 하면서 1초에 7번 퍼덕이는 코드를 다시 적어주는겁니다. 이런게 오버라이드입니다. 상속받은 클래스에서 메서드를 바꿀 필요가 있을때 재정의 한다는 의미입니다.
또한가지 말씀드리면 보통 Activity 클래스를 상속받아쓰면 onCreate()를 상속해서 쓰게되는데 이때보면 항상 들어가는게 super.onCreate()입니다. 이게 무슨 의미가 있냐고 하면 기본적으로 액티비티가 생성될때 보이지 않게 여러가지 일을 합니다. 근데 액티비티를 단순히 상속받아 onCreate()를 재정의 해버리게되면 기본적으로 액비비티가 생성될때 눈에보이지않게 여러가지 일을 하는걸 백지상태로 만들어버리게 됩니다. 따라서 상위클래스의 onCreate()를 호출까지 해서 기본적인 할일에 더해서 내가 적어줄 코드를 적어주는형태가 되게되는겁니다.
여기서 [좀더빨리나는오리]를 만들고자 [오리]클래스를 상속받았다고 합시다. 그럼 좀더빨리날려면 1초에 7번이상 날개를 퍼덕거려야 되겠죠 이때 [난다()]메서드를 오버라이드를 통해 재정의 하면서 1초에 7번 퍼덕이는 코드를 다시 적어주는겁니다. 이런게 오버라이드입니다. 상속받은 클래스에서 메서드를 바꿀 필요가 있을때 재정의 한다는 의미입니다.
또한가지 말씀드리면 보통 Activity 클래스를 상속받아쓰면 onCreate()를 상속해서 쓰게되는데 이때보면 항상 들어가는게 super.onCreate()입니다. 이게 무슨 의미가 있냐고 하면 기본적으로 액티비티가 생성될때 보이지 않게 여러가지 일을 합니다. 근데 액티비티를 단순히 상속받아 onCreate()를 재정의 해버리게되면 기본적으로 액비비티가 생성될때 눈에보이지않게 여러가지 일을 하는걸 백지상태로 만들어버리게 됩니다. 따라서 상위클래스의 onCreate()를 호출까지 해서 기본적인 할일에 더해서 내가 적어줄 코드를 적어주는형태가 되게되는겁니다.
2010.02.05 00:10:34
virtual 이란 개념이 나온지는 오래 되었기 때문에 찾아보면 자료가 많이 있습니다. 그 흔한 c++ 입문책만 봐도 자세히 설명되어 있을꺼에요.
2010.02.05 00:12:57
C++ 책을 보시는 것보다 JAVA책을 보시는게 더 괜찮지 않을까요..
그리고 이런 개념들은 객체지향 언어의 특징이므로 객체지향 언어가 어떤 특징을 가지고 있는지 부터 차근차근 알아가시는게 좋을것 같습니다.
그리고 이런 개념들은 객체지향 언어의 특징이므로 객체지향 언어가 어떤 특징을 가지고 있는지 부터 차근차근 알아가시는게 좋을것 같습니다.
2010.02.05 01:19:23
//dingpong님 제가 혼자 공부하는 능력이 좀 결여된 사람이라서요 ㅠㅠ 대화를 하면서 배우는걸 좋아해요
책보면서 공부하면 이해가 너무 안되서^^
//Vacant님 말씀 대로 자바 공부해봐야 겠네요^^
//wonae님이 추천해주시는 책사서 공부해봐야 겠네요 ^^
다들 너무 감사합니다.
책보면서 공부하면 이해가 너무 안되서^^
//Vacant님 말씀 대로 자바 공부해봐야 겠네요^^
//wonae님이 추천해주시는 책사서 공부해봐야 겠네요 ^^
다들 너무 감사합니다.
2014.01.08 22:24:57
다른분들이 오버라이딩 개념 자체에 대해서는 설명을 잘 해주셔서 @override의 의미에 대해서만 말씀드리겠습니다.
@override는 컴파일러에게 정의하는 메소드가 오버라이딩을 목적으로 정의되었다는 사실을 알려줍니다.
@override를 적은 경우에는 오버라이딩만을 목적으로 정의하여야 하기 때문에, 상속받는 부모 클래스의 메소드와 다른 이름의
메소드를 정의할 경우 에러 메세지를 뱉습니다.
예를 들어서 부모 클래스의 helpme() 메소드를 오버라이드하는데 helpem()와 같이 오타를 냈을 경우 컴파일러가
'그건 니가 오버라이딩하려던 메소드가 아닌거 같은데'라는 메세지를 띄웁니다.
단순히 주석처럼 개발자에게 알리려는 목적만 있는줄 알았는데 이런 의미가 있더라구요.
4년전 질문이지만 유효한거 같아 답변 달아봅니다.
추상클래스에서 구현하지 않은 메소드를 서브클래스에서 구현할때 오버라이딩 해서 사용합니다. 너무 간결한가요 설명이
추상클래스를 상속받는다면 상위클래스에서 구현되지 않은 메소드들은 반드시 상속받은 클래스에서 구현해야 합니다.