김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • http에러메세지
  • 프론트앤드
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • ErrorPage
  • 자바
  • 코딩
  • 객체지향프로그래밍
  • 코딩공부 #자바공부
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • HTML공부
  • 백앤드
  • 자바공부
  • web.xml수정
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • httperror
  • 코딩공부
  • 풀스택

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Java/: 기본 익히기

[JAVA] #8-1 Super

2022. 9. 15. 11:21

1. Class들의 관계

 

 우린 상속을 배우면서 class들간의 관계를 배웠다.

 class는 상속을 하면서 상위와 하위 클래스라는 관계가 생기고 우린 그 관계를 부모-자식의 관계라 부르기로 했다.

 

 그 중 Super는 관계 중 부모 관계를 뜻한다.

 당연히 수많은 클래스들 중에서 부모의 역할을 하면서 자식의 역할을 하는 클래스도 있고, 부모의 역할과 자식의 역할만 하는 클래스도 있을 것이다.

 우린 그것들을 묶어서 Superclasses(부모 클래스들), Subclasses(자식 클래스들)이라고 부른다.

 

 super를 사용하기 전에 this를 떠올려보자.

 this는 클래스 안에서 멤버변수와 지역변수를 구분해서 사용하기 위해 사용했다.

 this()도 생성자 함수가 생성자 함수를 호출할 때 사용했다.

 

 이것처럼 super도 동일하다.

 super는 자식 클래스에서 부모 클래스의 멤버에 접근할 때 사용되고,

 super()는 자식 클래스의 생성자 함수가 부모 클래스의 생성자 함수를 호출할 때 사용된다.

 

 이 게시물에선 이렇게 super를 사용해서 접근하는 문법에 대해 알아보고자 한다.

 

 

2. 상속관계에서 생성자 함수 알아보기

 

 아래의 코드를 봐보자.

package oop0915;

class School extends Object {
	String name="학교";
	public School() {
		System.out.println("School()...");
	}
} // class end

class MiddleSchool extends School {
	public MiddleSchool() {
		System.out.println("MiddleSchool()...");
	}
} // class end

class HighSchool extends School {
	public HighSchool() {
		System.out.println("HighSchool()...");
	}
} // class end


public class Test01_super {
	public static void main(String[] args) {

		MiddleSchool ms = new MiddleSchool();

		HighSchool hs = new HighSchool();

	} // main() end
} // class end

 

 School이라는 부모 클래스 아래에 MiddleSchool 클래스와 HighSchool 클래스를 자식 클래스로 생성했다.

 그리고 생성자 함수가 호출되면 생성자 함수 이름이 호출되도록 코드를 넣어두었다.

 그 후 MiddleSchool과 HighSchool의 새로운 인스턴스를 생성한 뒤 출력했다.

 어떤 결과가 나올까?

출력 결과

 

 School()이 항상 먼저 나오는 것을 확인할 수 있다.

 이는 부모 생성자가 먼저 호출되고 자신의 생성자 함수가 호출된다는 뜻이다.

 

 즉, 자식 클래스의 생성자 함수는 부모 생성자의 함수 호출 명령어를 포함하고 있다는 뜻이다.

 

 

3. 상속관계에서 멤버 함수(메소드) 알아보기

 

1) 부모 클래스의 값 그대로 가져오기

 생성자 함수(Constructor)와 마찬가지로 멤버 함수(Method)도 클래스가 상속관계에 있고 부모 클래스가 있다면 함수 안의 지역 변수들은 부모가 갖고 있는 멤버 변수에 영향을 받는다.

 

 먼저 MiddleSchool에 disp() 메소드를 추가하고 name을 출력하게 했다.

 

 어떻게 될까?

 출력 결과는 아래와 같다.

 

 

 여기서 위의 코드를 살펴보면 name은 MiddleSchool이 갖고 있는 값이 아니다.

 name은 부모 클래스인 School 클래스가 갖고 있다.

 자식 클래스는 부모 클래스의 값을 상속한다.

 

2) 자식 클래스가 자신의 값 그대로 사용하기

 이번엔 자식 클래스 안에 값을 따로 지정해두었다.

 

이클립스가 친절하게 name의 색을 바꿔서 다른 변수임을 확인시켜준다.

 

 이 상태로 HighSchool 클래스에 disp() 함수를 호출하면 강남고등학교가 출력되는 것을 확인할 수 있다.

 

 

 그런데 여기에다가 또 name 변수를 만들어서 값을 넣으면 어떻게 될까?

 

 이제 name이란 변수가 세 가지가 생긴거다.

 disp() 안에 선언된 지역변수 name.

 HighSchool 클래스 안에 선언된 멤버 변수 name.

 School 부모클래스 안에 선언된 멤버 변수 name.

 

 이 세 변수를 호출하는 방법을 위 사진을 통해 이해해보자.

 this와 super는 이런식으로 사용된다.

 

 

3. super, super()와 this, this() 활용한 클래스 설계

 

package oop0915;

class Parent extends Object {
	int one, two;
	public Parent () {}
	public Parent(int one, int two) {
		this.one=one;
		this.two=two;
	}
} // class end

class Child extends Parent {
	int three;
	public Child() {
		super(); // 생략 가능
	} // end
	public Child(int a, int b, int c) {
		
		// 주의) one, two 멤버 변수가 private면 에러가 난다
		// super.one=a;
		// super.two=b;
		
		super(a, b);	// 상속받은 멤버변수(one, two)에 초기값 전달
		this.three = c;
	} // end
	
	
} // class end

public class Test02_super {

	public static void main(String[] args) {
		// super, super()와 this, this() 활용한 클래스 설계
		
		Child child = new Child(10, 20, 30);
		System.out.println(child.one);
		System.out.println(child.two);
		System.out.println(child.three);
		
		
	} // main() end
} // class end
저작자표시 비영리 동일조건 (새창열림)

'⁂ Java > : 기본 익히기' 카테고리의 다른 글

[JAVA] #8-3 추상(Abstract)  (0) 2022.09.15
[JAVA] #8-2 다형성(Polymorphism)  (0) 2022.09.15
[JAVA] #7-3 Object와 toString()  (0) 2022.09.14
[JAVA] #7-2 Override  (0) 2022.09.14
[JAVA] #7-1 상속(Inheritance)  (0) 2022.09.14
    '⁂ Java/: 기본 익히기' 카테고리의 다른 글
    • [JAVA] #8-3 추상(Abstract)
    • [JAVA] #8-2 다형성(Polymorphism)
    • [JAVA] #7-3 Object와 toString()
    • [JAVA] #7-2 Override
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바