[JAVA-1]

Variable LifeCycle

  • member variable

    • class 내에 정의되는 variable
    • 메모리 영역 중 heap에 생성된다.
    • static(class) variable : class가 메모리에 로딩시에 메모리 할당이 이루어지며, 자동초기화 된다. class 제거 시 제거된다.
    • instance variable : 객체 생성 시 자동으로 초기화되며, 객체 제거시 제거된다.
  • local variable

    • method나 constructor {} 내에 정의되는 variable이다.
    • 메모리 영역 중 stack에 생성된다.
    • method나 constructor 호출 시에 생성되었다가 수행 종료 시 사라진다.
    • 자동으로 초기화 되지 않기 때문에 반드시 초기화하여 사용하여야 한다.

Method Overloading

  • 메소드명은 같고, 파라메터는 반드시 달라야한다.
  • return type은 상관 없음
1
2
3
4
5
6
7
public String print(String x, String y){
    return "something";
}

public void print(int x, int y){
    // do something
}

Method Overriding

  • sub클래스의 Overriding되는 method는 상속받은 super 클래스와 아래 내용이 반드시 같아야한다.
    • name
    • return type
    • argument list
    • access modifier는 같거나 넓은 범위를 가져야한다.

Overloading vs Overriding

  • 공통점
    • method 정의 시 사용되는 기법
    • method 이름을 같게 정의
    • 사용의 편리성
    • 다형성 효과
  • Overriding
    • 상속을 기반
    • super로부터 상속받은 기능 중 특저 기능을 재정의하는 기법
    • return type, method 이름, parameter list는 항상 길게
    • access modifier는 같거나 넓은 범위
  • Overloading
    • 하나의 클래스나, 상속받은 클래스의 내에 같거나 비슷한 기능의 method의 이름을 같게 정의해서 편리성을 추구
    • method 이름은 같게, parameter list는 다르게 정의
    • 나머지 method 형식은 상관 없다.

Access Modifier

  • private : 같은 클래스 내에서만 사용할 수 있다.
  • (default) : 아무것도 정의하지 않았을 경우, 같은 클래스, 같은 패키지 내에서만 사용할 수 있다.
  • protected : 패키지가 다르면 사용할 수 없으나, 상속을 받았다면 사용할 수 있다.
  • public : 어디서나 사용할 수 있다.

Usage Modifier

  • static : 객체 생성없이 사용하고자 할 경우에 사용한다.
  • final : 변경할 수 없음을 의미한다.
  • abstract : 미완성임을 의미한다.

toString()

  • 프린트시 println(객체변수)의 요청을 println(객체변수.toString())으로 변환하여 처리한다. 그러므로 toString() 메서드 내에 객체의 정보를 출력할 수 있도록 설계하면 편리하게 객체 정보를 출력할 수 있다.

String vs StringBuilder

  • String 값은 어떤 값으로든 변경되고, + 연산도 되지만, 메모리 내부에서 String 객체의 값이 변경되어지지 않고, StringBuilder를 이용하여 변경처리 하고, String으로 변환하여 출력한다. 그렇기 때문에 +을 사용하여 문자열을 편집하게 되면 성능에 문제가 될 수 있다. 문자열의 편집이 많이 필요할 경우는 처음부터 StringBuilder를 생성하여 문자열을 편집하는 것이 좋다.

Modifier

static

  • static variable

    • 멤버 변수 정의시에 static 키워드를 선언하여 정의한다. static으로 정의된 변수는 객체 생성 없이 사용할 수 있다.

      class명.변수명

    • 그 클래스를 instance한 객체들 간의 공용변수로 사용한다.
  • static method

    • 메소드 정의 부분에 static 키워드를 사용하여 정의한다.
    • 객체 생성 없이 사용할 수 있다.

      class명.method명()

    • static 메소드는 객체 생성 없이 사용되므로 매소드 안에서 static 변수만 사용할 수 있다.
    • this, super 변수 사용 불가
    • overriding 안됨
  • static block

    • 클래스가 메소드에 로딩된 후 자동 호출된다

      static{ }

final

  • 마지막을 의미
  • final variable : 상수로 정의
  • final class : 상속 받을 수 없음
  • final method : Override 할 수 없음
  • interface는 변수를 사용할 수 없고, 모두 상수로 정의된다.

abstract

  • 일부 구현되지 않은 메소드를 포함할 수 있는 클래스 정의 시에 사용하며, 구현되지 않은 메소드 정의 시에 사용한다.
  • abstract class는 완전히 구현되지 않았기 때문에 객체를 생성하지 못한다. 상속을 통해 상속 받은 클래스가 abstract 메소드를 모두 구현해야 객체 생성이 가능하다. 상속 받은 서브클래스를 객체 생성하여 사용시에 슈퍼 타입의 레퍼런스로 사용할 수 있다.

interface

  • 인터페이스는 상수와 구현되지 않은 메서드로만 구성된다. 상수 정의시에 특별히 상수라고 명시하지 않아도 컴파일러에 의해서 상수로 변경된다. 또한 메소드 정의시에 public 하게 정의하지 않아도 인터페이스의 모든 메서드는 컴파일러가 public 제한자를 삽입한다.
  • 특별히 정의하지 않아도 컴파일 시에 아래 제한자가 추가된다.
    • public static final
    • public abstract
    • 메소드 Overriding 시 항상 public 제한자를 가져야 한다.