쌍용교육센터 - 9일

개발자가 되고 싶어요 ㅣ 2024. 2. 28. 17:55

static

static 예약어는 멤버 메서드멤버 변수에 정의 할 수 있으며 지역 변수나 클래스에게는 정의할 수 없다. 멤버 메서드나 멤버 변수에 static이라는 예약어를 정의하면 static 메서드(클래스 메서드)와 static 변수(클래스 변수)라고 불리게 된다. 이유는 멤버 변수나 멤버 메서드들은 해당 객체가 생성될 때 객체가 생성된 메모리 공간에 같이 존재 하게 되지만 static으로 선언된 메서드(멤버 함수)나 변수들은 static영역(메서드 영역) 이라는 곳에 유일하게 만들어 지면서 모든 객체(Object)들이 사용 할 수 있도록 공유 개념을 가지기 때문이다.

 

static 초기화

클래스가 실행될 때 가장 먼저 호출되는 영역을 만들고자 한다면 호출 블럭에 static를 명시한다. 클래스 실행 시 단 한 번만 실행되어 클래스 실행 시 초기화할 내용을 배치하는데 유용하다.

 

인스턴스 변수: 객체가 생성될 때 객체에 포함되는 변수

static(클래스) 변수: 객체 생성과 무관, 호출하면 (heap)메모리 영역에 올라감

public class StaticCount {
	
	//인스턴스 변수: 객체가 생성될 때 객체에 포함되는 변수
	int c;
	//static(클래스) 변수: 객체 생성과 무관, 호출하면 메모리에 올라감
//						호출하면 메모리(static 영역)에 올라감
//						호출할 때는 클래스명을 붙여서 호출해야 함
	static int count;
	
	//생성자
	public StaticCount() {
		c++;
		count++;
	}
}
public class StaticMain01 {
	public static void main(String[] args) {
		StaticCount sc1 = new StaticCount();
		System.out.println("c: "+sc1.c+", count: "+StaticCount.count);
		
		StaticCount sc2 = new StaticCount();
		System.out.println("c: "+sc2.c+", count: "+StaticCount.count);
		
		StaticCount sc3 = new StaticCount();
		System.out.println("c: "+sc3.c+", count: "+StaticCount.count);
		
	}

}

 

상속

클래스의 상속

  • 상속(inheritance)은 기존 클래스를 확장해서 새로운 클래스를 만드는 기술을 의미하며 마치 일상 생활에서 부모가 보유하고 있는 재산 중 일부를 자식이 물려 받는 것과 같다고 할 수 있다.

 

상속 정의

클래스 상속 : extends

인터페이스 상속 : implements

 

상속의 중요성

  • 클래스 상속은 객체의 재사용이라는 장점뿐 만 아니라 코드의 간결성을 제공해주는 객체지향적 언어의 장점과 중요한 특징이 된다. 그러므로 잘 정의된 super클래스가 있다면 sub클래스의 작성이 간편해지고 무엇보다 개발 시간이 단축된다는데 상속의 중요성과 장점을 들 수 있다.
//부모클래스
// Object -> 최상위 클래스
class People extends Object{
	public void eat() {
		System.out.println("식사하다.");
	}
}

//자식클래스
class Student extends People{
	public void study() {
		System.out.println("공부하다.");
	}
	
	public void eat() {
		System.out.println("오버라이딩: 식사할거다.");
	}
}

public class ExtentionMain02 {
	public static void main(String[] args) {
		Student student = new Student();
		student.eat();
		student.study();
		System.out.println(student.toString());
	}
}

메서드 오버라이딩

오버라이딩은 [메서드 재정의] 라고도 불리며 이는 서로 상속관계로 이루어진 객체들간의 관계에서 비롯된다.

super클래스가 가지는 메서드를 sub클래스에서 똑같은 것을 새롭게 만들게 되면 더 이상 super클래스의 이름이 같은 메서드를 호출할 수 없게 된다. 이를 Overriding이라 하고 또는 멤버 은폐라고도 한다.

 

@Override : 메서드 재정의가 문법에 맞게 재정의가 되었는지를 검증하는 역할을 수행한다. 만약 문법에 맞게 재정의 되지 않으면 컴파일 오류가 발생한다.

//부모클래스
class GrandParent{
	public String getCar() {
		return "구형 자동차";
	}
}

//자식클래스
class Father extends GrandParent{
	//Method Overridng(메서드 재정의)
	//상속관계에서 자식클래스에 메서드 재정의를 하면 부모클래스의 메서드가 호출
	// 되는 것이 아니라 자식클래스의 메서드가 호출됨
	
	//@Override 어노테이션은 메서드 재정의 문법에 맞게 재정의가 되었는지를
	// 검증하는 역할 수행, 문법에 맞게 재정의 되지 않으면 컴파일 오류 발생
	@Override
	public String getCar() {
		return "신형 자동차";
	}
}
class Oncle extends GrandParent{
	
}

public class OverridingMain01 {
	public static void main(String[] args) {
		Father ft = new Father();
		System.out.println("아버지는 " + ft.getCar()+ "를 좋아해요!!");
		
		Oncle on = new Oncle();
		System.out.println("삼촌은 " + on.getCar() + "를 좋아해요!!");
	}
}

super

super는 앞서 배운 this와 함께 객체를 참조할 수 있는 reference변수이다. this는 특정 객체 내에서 자기 자신의 객체를 참조할 수 있는 유일한 reference변수이다. 그리고 super라는 reference변수는 현재 객체의 바로 상위인 super클래스(부모클래스)를 참조할 수 있는 것이다.

super()

super()는 바로 super클래스의 생성자를 의미하는 것이다. 인자가 있다면 인자의 형태와 일치하는 생성자를 의미한다.

'IT 국비 교육' 카테고리의 다른 글

쌍용교육센터 - 11일  (0) 2024.03.04
쌍용교육센터 - 10일  (0) 2024.02.29
쌍용교육센터 - 8일  (1) 2024.02.27
쌍용교육센터 - 7일  (0) 2024.02.26
쌍용교육센터 - 6일  (0) 2024.02.23