We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
public class Test { public static void sm() { System.out.println("this is static method!"); } public void m() { System.out.println("this is non-static method!"); } } public class Main { public static void main(String[] args) { Test.sm(); // O Test.m(); // X } }
말 그대로 "정적"이기 때문에 클래스가 메모리에 올라갈 때 정적 메소드가 자동적으로 생성된다.
public class ClassA { // 정적 메소드: 인스턴스 변수 사용 안 함 public static int add(int a, int b) { return a + b; } }
static Object obj = new Object();
public class OuterClass { public static class StaticInnerClass { public void display() { } } }
+.. inner 클래스에 static을 꼭 붙여줘야 하는 이유?
현대의 자바 개발 도구는 automatic recompilation(자동 재컴파일)을 지원하지만, 인터넷 환경과 같이 분산된 환경에서는 이러한 작업이 힘들다.
바이너리 호환성
등등등... => 메소드 시그니처의 변경이나, 클래스 인터페이스의 변경이나 접근 제어 변경이 없고 기존 기능을 유지한다.
인터페이스 장점
public interface Walkable { void walk(); } public interface Flyable { void fly(); } public class Penguin implements Walkable,Flyable{ @Override void walk() {} @Override void fly() {} }
abstract class Animal { public abstract void makeSound(); } class Dog extends Animal { @Override public void makeSound() { System.out.println("Woof"); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow"); } } // 새로운 추상 클래스 추가 abstract class Robot { public abstract void performTask(); } class DogRobot extends Dog { @Override public void performTask() { System.out.println("DogRobot performs task"); } } class CatRobot extends Cat { @Override public void performTask() { System.out.println("CatRobot performs task"); } }
DogRobot이랑 CatRobot은 Dog와 Cat을 상속하면서도 Robot의 기능을 가져와야 하는데, 그러면 상속 구조가 복잡해지고 코드의 가독성과 유지보수성이 떨어진다.
-> 인터페이스로 역할 분리, 상속 구조 단순화
The text was updated successfully, but these errors were encountered:
MinjuKwak01
No branches or pull requests
정적 메소드
말 그대로 "정적"이기 때문에 클래스가 메모리에 올라갈 때 정적 메소드가 자동적으로 생성된다.
정적 메소드는 무슨 기준으로 정해야 하는지?
정적 변수가 다른 객체를 참조한다면?
Metaspace 영역?
정적 클래스
+.. inner 클래스에 static을 꼭 붙여줘야 하는 이유?
바이너리 호환성
현대의 자바 개발 도구는 automatic recompilation(자동 재컴파일)을 지원하지만, 인터넷 환경과 같이 분산된 환경에서는 이러한 작업이 힘들다.
바이너리 호환성
바이너리 호환성의 존재 이유
바이너리 호환성이 적용되는 경우
등등등...
=> 메소드 시그니처의 변경이나, 클래스 인터페이스의 변경이나 접근 제어 변경이 없고 기존 기능을 유지한다.
이펙티브 자바 20 -> 추상 클래스보다는 인터페이스를 우선하라
인터페이스 장점
DogRobot이랑 CatRobot은 Dog와 Cat을 상속하면서도 Robot의 기능을 가져와야 하는데, 그러면 상속 구조가 복잡해지고 코드의 가독성과 유지보수성이 떨어진다.
-> 인터페이스로 역할 분리, 상속 구조 단순화
The text was updated successfully, but these errors were encountered: