3 분 소요

Object 클래스 | 상속 | 접근 제어자 | 패키지 | static

Object 클래스

- java.lang.Object, 모든 클래스의 최상위 클래스

- 모든 클래스는 Object 클래스의 메소드를 사용할 수 있고, 일부 메소드를 override 해서 사용할 수도 있음.

- Object 클래스가 들어있는 java.lang 패키지는 컴파일러에 의해 자동으로 import 됨.


toString()

- 객체의 해시코드 출력

- 클래스@해시코드, getClass().getName() + “@” + Integer.toHexString(hashCode())

- 객체의 정보를 문자열 형태로 표현하고자 할 때 override 를 자주 하는 편


equals()

- 객체의 값(==) 연산


hashcode()

- JVM 이 부여한 코드값

- 객체가 저장된 가상머신의 주소를 10진수로 반환


clone()

- 객체의 복사본을 만듬

- clone() 은 객체를 복제할 때 private 필드도 복제할 수 있기 때문에 은닉화에 위배



상속

- 특정 클래스를 구성할 때 기존 클래스의 데이터와 메소드를 부모 클래스에서 그대로 물려받아 중복적인 코드를 줄이는 것

- 하나의 변수 타입으로 여러 종류의 객체를 의미하는 추상화된 방식의 프로그램을 가능하게 해줌


상속성

- 상위 개념의 특징을 하위 개념이 물려받는 것.

- 재사용으로 인해 코드를 줄임

- 객체지향 프로그래밍의 하이라이트


다형성

- 부모클래스에서 물려받은 가상함수를 자식 클래스에서 오버라이딩되어 사용하는 것

- 클래스 내부에 동일한 이름의 오퍼레이션을 여러개 정의하는 것

- 자바에서 상속을 하는 방법

    접근제어자 class 클래스명 extends 부모클래스명{
        클래스 설계;
        ...
    }


오버라이딩

- 부모클래스에 있는 필드 또는 메소드를 자식 클래스가 재정의 하는 것


오버로딩

- 동일한 이름의 메소드들을 매개변수의 타입과 개수를 다르게 하여 여러 메소드를 사용할 수 있는 기능.


instanceof 연산자

- 참조변수가 참조하고 있는 인스턴스(객체)의 실제 타입을 알아보기 위해 사용하는 연산자

- instanceof 왼쪽에는 참조변수를, 오른쪽에는 타입(클래스 명)이 피연산자로 위치

- 연산의 결과는 boolean값으로 반환(true : 형변환이 가능)



접근 제어자

- 외부에 공개되는 수준을 의미

- public, protected, default, private

public : 모든 외부에서 직접 접근하거나 호출 protected : 현재 클래스와 동일한 패키지거나 다른 패키지더라도 상속시 접근하거나 호출 default : 현재 클래스와 동일한 패키지 내에서만 호출(접근제어자를 표기하지않으면 default) private : 현재 클래스의 {}바깥쪽에서는 절대 접근하거나 호출할 수 없음


클래스 접근 제한

- public, default 만 사용 가능

- public인 경우 외부에 클래스를 노출, default는 현재 패키지에서만 접근할 수 있게 함


필드의 접근 제한

- public, protected, default, private 모두 사용가능

- 일반적으로 private, public static으로 선언하는 것이 일반적


메소드의 접근 제한

- public, protected, default, private 모두 사용가능

- 추상메소드의 형태로 메소드를 만들 때 private으로 선언할 수 없음



패키지

- 클래스의 파일들을 체계적으로 관리하도록 사용하는 디렉토리 개념


사용자가 패키지를 만드는 형태

com.회사명.프로젝트명 
) com.koreait.kakaotalk.db

🎁 패키지의 맨 뒤는 주로 패키지 안에 있는 클래스들의 역할로 작성되는 경우가 많음


static

- 모든 객체가 공유한다는 의미

- static이 붙은 변수는 클래스 변수 (static이 붙지 않은 변수는 인스턴스 변수)

- 메모리에 우선 로드되므로 속도가 빠름

- 메모리가 회수되지않기 때문에 주의

변수에 적용 - 모든 객체가 변수를 공용으로 사용

public class Static1 {
    public static void main(String[] args) {
        Button customer1 = new Button();
        customer1.click();
        customer1.click();
        customer1.click();
        customer1.click();

        Button customer2 = new Button();
        customer2.click();
    }
}
----------------------------------------------------
public class Button {

    private static int count = 0; // 모든 객체가 공유하게 됨(공용변수)

    public void click(){
        count++;
        System.out.println("고객님의 대기번호는 " + count + "입니다.");
    }

}


블록에 적용 - 같은 객체가어려개 만들어지더라도 단 한번만 실행되는 코드블록을 만듬

public class Static2 {
    public static void main(String[] args) {
        Block block1 = new Block();
        Block block2 = new Block();
        block1.print();
        block2.print();
    }
}
----------------------------------------------------
public class Block {
    static {
        System.out.println("static 블록을 테스트합니다.");
        System.out.println("이 블록은 객체를 생성할 때 단 한번만 실행됩니다.");
    }
    public void print(){
        System.out.println("😃😃😃😃😃😃😃😃😃");
    }
}


메소드에 적용 - 객체를 사용하지 않고 클래스, 메소드 이름으로 접근하여 사용

import java.util.Scanner;

public class Static3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("반지름을 입력하세요.");
        double r = sc.nextDouble();
        double area = AreaUI.calcCircle(r);

        System.out.println("원의 넓이는 : " + area);
    }
}
-----------------------------------------------------
public class AreaUI {
    public static double calcCircle(double radius){
        return (radius * radius) * Math.PI;
    }
}

태그:

카테고리:

업데이트: