본문 바로가기

전체 글

(61)
추상 메서드와 추상 클래스 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 추상 메서드와 추상 클래스 추상 메서드란, 선언만 되어있고 구현은 되어있지 않은 메서드를 의미합니다. public abstract void doSomething(); 위와 같은 형태로 접근 지정자 뒤, 반환형 앞에 abstract 예약어를 붙여 선언해줍니다. 추상 메서드는 추상 클래스 안에 선언되며, 해당 추상 클래스를 상속받은 클래스가 같은 추상 클래스가 아니라면, 반드시 해당 메서드를 구현해주어야 합니다. 추상 클래스란, 직접적으로 생성자를 호출하여 인스턴스를 생성할 수 없는 클래스를 의미합니다. 추상 클래스는 추상 메서드를 가질 수도, 가지지 않을 수도 있습니다. public abstract class Perso..
(상속) 메서드 오버라이딩과 다형성 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 다형성 다형성이란 다양한 형태를 취할 수 있는 능력을 의미합니다. 객체지향 프로그래밍에서는 다형성의 강력함을 통해 코드를 매우 간결하게 할 수 있습니다. 이런 다형성을 구현하는 대표적인 방법이 자바에서 메서드 오버 라이딩입니다. 간단한 예시와 함께 다형성에 대해 알아보겠습니다. 위와 같은 상속 구조가 있다고 생각해보겠습니다. 제가 전에 올린 상속 관련 글들을 보신 분들이라면 아시겠지만, Person type reference로 professor, student, gamer 인스턴스 모두를 가리킬 수 있습니다. (업 캐스팅) 소스코드를 보겠습니다. public class Person { public void doSome..
(상속) 메서드 오버라이딩과 동적 바인딩 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 메서드 오버 라이딩 오버 라이딩이란, 하위 클래스에서 상위 클래스의 함수를 재정의하는 것을 의미합니다. 자바에서는 함수를 식별할 때 이름과 매개변수로 식별합니다. 이름과 매개변수가 같은 함수, 즉 동일한 함수를 재정의 하는 것을 오버 라이딩이라고 합니다. 상속에서는 이런 오버 라이딩을 통해 다형성의 기반을 쌓는데요 오늘은 오버 라이딩에 대해서만 간단하게 알아보겠습니다. 아래 소스코드를 먼저 보겠습니다. class SuperClass { void f() { System.out.println("SuperClass"); } } class SubClass extends SuperClass{ @Override void f() ..
(상속) 업캐스팅과 다운캐스팅 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 업 캐스팅과 다운 캐스팅 상속에서 업 캐스팅은 아래와 같이 요약할 수 있습니다. 상위 클래스 레퍼런스 변수에 하위 클래스 인스턴스를 담는다. 아래 예시를 보겠습니다. class A { } class B extends A{ } public class C extends B{ } 위와 같은 상속 구조에서 A = new B(); A = new C(); B = new C(); 와 같이 상위 클래스 레퍼런스에 하위 클래스 인스턴스를 담는 것을 업 캐스팅이라고 합니다. 업 캐스팅 시에는 위와 같은 구조를 갖기 때문에, 타입의 안전성이 보장됩니다. 예전에 자동 형 변환과 강제 형 변환에 대해서 다뤄본 적이 있었습니다. 업캐스팅시에는..
(상속) 생성자 호출 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 상속에서 부모 생성자의 호출 상속 관계에 있는 클래스들 중, 하위 클래스가 생성될 때는 자동으로 상위 클래스의 생성자가 먼저 호출되고 나서 하위 클래스의 생성자가 호출됩니다. 부모가 있어야 자식이 있을 수 있는 것과 같은 원리라고 생각하시면 됩니다. 위와 같은 상황에서 C를 생성하면 먼저 A, B의 생성자가 호출된 뒤에 C의 생성자가 호출됩니다. 코드로 보겠습니다. class A { A() { System.out.println("A"); } } class B extends A{ B() { System.out.println("B"); } } public class C extends B{ C() { System.out.p..
(상속) 부모 클래스 접근 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 상속에서 부모 클래스 접근하기 아래와 같은 구조에서 접근입니다. 소스코드입니다. class A { int x; } class B extends A{ int x; } public class C extends B{ int x; } 위와 같이 필드의 이름이 겹치는 구조에서는 접근이 어떻게 될까요? 물론 위처럼 필드의 이름이 겹치도록 설계하는 것은 좋은 구조는 아닙니다. 메서드는 '메서드 오버 라이딩'이라고 하여 다형성의 기반이 되는 것이 존재하지만 필드의 경우에는 겹치도록 설계하는 것이 좋지 않습니다. 그럼에도 이런 경우 어떻게 접근되는지 알아보겠습니다. 우선 필드 접근에 대해서 이해하려면, 필드와 메서드는 접근 방식이 다..
자바 상속 기본 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com 상속 상속과 다형성은 객체지향의 '꽃'이라고 해도 과언이 아닙니다. 오늘은 자바의 상속에 대해서 알아보겠습니다. 상속이란, 상위 클래스의 필드, 메서드를 하위 클래스가 물려받는 것을 의미합니다. 그래서 상속을 통해 '올바른 상속관계'에 있는 클래스들을 정의한다면 하위 클래스에서 동일한 필드나 메서드를 재정의할 필요가 없기 때문에 코드가 간결해지고 유지보수가 쉽습니다. 여기서 말하는 올바른 관계에는 IS-A 관계가 대표적입니다. IS-A는 말 그대로 '일종의 ~인 관계이다' 라고 정의합니다. 간단한 예로 학생과 사람이 있다면 학생은 일종의 사람입니다. 사람이 갖는 기본적인 특성인 머리, 팔다리, 이름 등을 그대로 갖고 ..
Java static / non-static 훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com static / non-static static은 언제 사용할까요? 1. 전역 변수, 전역 함수를 만들 때 사용 2. 클래스에서 관리하는 변수, 함수를 만들 때 사용 우선 위와 같이 static이 사용되는 상황에 대해서 인지하고, Java의 메모리 구조를 이해하면 static을 완벽하게 이해할 수 있습니다. 아래 코드를 보겠습니다. public class StaticExam { public static int sint; public static void setSint(int input) { sint = input; } public int mint; public void setMint(int input) { mint =..