가쟤의 해변일기 🐳

풀스택 과정 3주차 - static, 클래스 변수 | 인터페이스 | Abstract Class 본문

풀스택과정

풀스택 과정 3주차 - static, 클래스 변수 | 인터페이스 | Abstract Class

바닷가쟤 2025. 4. 25. 10:18
💡 2025 04 24 수업 이슈
1. static 키워드와 클래스 변수
2. 인터페이스 정의와 사용 용도
3. Abstract Class

 

field, local → 지역 변수

static → 전역 변수, class 변수

 

Polymorphism과 Interface를 사용해야 재사용성이 좋음

 

static

static 키워드 성질

  1. static이 붙은 멤버(필드, 메소드)는 객체 생성 과정을 건너뛴다.
  2. 객체 생성 안 해도 미리 메모리에 올라가 있다.
  3. 자바는 2단계실행 .class 파일 JVM Loader—> Interpreter
  4. —> 실행
  5. —> byteCode Verifier
  6. 컴파일 ~.java —> ~.class
  7. static한 필드, 메소드 사용할 때는
    • 클래스 이름.필드;
    • 클래스 이름.메소드();
    이렇게 바로 호출Math.random()Arrays.copyof()
  8. System.out…
  9. System.arraycopy()
  10. Integer.parseInt()
  11. static 변수는 로컬 레벨에서는 사용 못 한다. → 필드 레벨에서만 사용 가능하다.
  12. static한 변수는 생성된 객체들에서 공유한다!!!⭐
  13. static 키워드는 final과 같이 사용되는 경우가 많다.Usage Modifier ::: 사용 지정자 static, final, abstract
  14. final :: “내가 마지막이야~” 라는 의미를 가지는 키워드
  15. access Modifier ::: 접근 지정자 public < protected < private
package com.edu.test;

class Member{
	static int ssn = 1234;
	static String name = "길동";
	int age = 19;
	
	// 다 static이니까 가능
	public static void printMember() {
		System.out.println("우/유/빛/깔 " + name);
	}
	
	// 메모리 올리고 써야 함
	public void printMember2() {
		System.out.println("우/유/빛/깔 " + name);
	}
	
	// 메모리에 안 올라간 age가 껴 있음.
	// static은 static끼리 통한다.]
	❌❌❌
	public static void printMember3() {
		System.out.println("우/유/빛/깔 " + name + "님은 , " + age + "살");
	}
}


public class StaticExamTest1 {
	public static void main(String[] args) {
		Member.printMember();
	}
}

메모리에 아직 안 올라가 있어서 static에서 사용할 수 없다.

static은 static끼리만 사용 가능 !

 

package com.edu.test;

class A {
	public final static int BASE_SALARY = 40000; // 값 변경 ❌
	public final String test() { // 오버라이딩 ❌
		return "오버라이딩 금지";
	}
}

final class B { // 상속 ❌... 자식 클래스 못 만듬
	
}

final class C extends B { // ❌❌❌ B는 상속 금지 !
}

final class D extends A {
	public final String test() {
		return "오버라이딩 금지" + 1; // ❌❌❌ 오버라이딩 금지 !
	}
}

public class StaticExamTest2 {

	public static void main(String[] args) {
		A.BASE_SALARY = 30000; // ❌❌❌ 값 변경 금지 !
		
	}
}

final + 변수 —> “내가 마지막 변수야 ~” : 상수값 지정

final + 클래스 —> “내가 마지막 클래스야~” : 상속 금지

final + 메소드 —> “내가 마지막 메소드야~” : 오버라이딩 금지

 

필드는 제각각 값을 가짐. 메모리 주소가 다름

static은 Class Area에서 같은 값을 가짐. 주소가 1개임.

 

필드는 생성된 인스턴스 마다 서로 다른 값을 가지고 Class V(전역변수)는 생성된 각각의 객체들이 동일한 값을 공유하는 값이다.

 

SE에서는 JVM 실행 후 제일 먼저 찾는 함수가 main()

main() { 안 첫 번째 코드보다 더 먼저 실행되는 부분이 있다.

클래스의 생성자() {

// 필드 초기화

}

 

객체 생성 이전에 해야 할 작업이 만약에 있다면 static initialization block에서 하면 된다.

 


Interface

필드가 같은 것과 기능이 같은 것은 다르다.

인터페이스의 핵심은 기능 추출이다 !

템플릿을 표준화 시키자는 아이디어가 인터페이스다.

전~혀 관련 없는 클래스 사이에서 기능의 Template를 추상화 😀

동작 없이 메소드의 구현부만 구현해 놓은 곳에 abstarct를 붙여야 한다.

interface : 필드 X, abstract만 모아 놓은 곳

<<interface>> 스테레오 타입 : 클래스와 구별되게 표현

인터페이스는 객체 생성이 안 된다. → 한 개라도 있으면 안 되는 것임.

메모리에 못 올라감 !!

물려주는 존재로만 사용되는 부모이다.

public abstract 가 자동으로 붙어있어서 생략해도 된다.

필드도 없음 !

public static final 상수값은 존재한다..!

상수는 public static final 이 자동으로 앞에 붙는다.

  • 상수값
  • 메소드

이 둘이 인터페이스의 구성 요소이다.

추상화 정도에 따라서

interface → abstract class → class

abstract class는 객체 생성이 안 된다.

728x90