자바의 클래스와 객체

mDev_97·2022년 1월 4일
0

Java

목록 보기
6/28

캡슐화 (Encapsulation)

• 객체를 캡슐로 포장하여 내부를 볼 수 없게 하는 것
• 외부의 접근으로부터 객체를 보호하는 특징

클래스 (class)

• 객체의 모양을 선언한 틀 (캡슐화)
필드(멤버 변수)메소드(멤버 함수)는 모두 클래스 내에 구현한다.
• 객체의 속성(state)행동(behavior)을 포함한다.

public class Circle {
    public int radius; // Circle의 반지름, 멤버 변수
    public String name; // Circle의 이름, 멤버 변수
    
    public Circle() { // Circle의 생성자
    }
    public double getArea() { // Circle의 멤버 함수
        return 3.14 * redius * radius;
    }
}

클래스 선언

class Circle

class 키워드로 선언
• { } 안에 멤버 변수와 멤버 함수를 구현한다.
• Circle 이라는 이름의 클래스를 선언한 것

필드(멤버 변수)와 메소드(멤버 함수)

필드(field) : 객체 내에 값을 저장하는 멤버 변수
메소드(method) : 객체의 행동을 구현하는 함수

접근 지정자

• 필드 또는 메소드 앞에 붙이며, 다른 클래스의 접근 가능을 표시한다.
public : 클래스의 접근 권한, 다른 클래스에서 Circle 클래스에 접근 가능

생성자

public Circle() {

}

메소드
• 생성자는 여러 개 작성할 수 있다. (오버로딩)
• 생성자는 리턴 타입을 지정하지 않는다.
• 생성자 메소드의 이름은 클래스의 이름과 동일하다.
• 객체를 생성할 때 자동으로 한 번 호출된다.
• 처음 객체를 초기화할 때 필요한 내용을 작성한다.

기본 생성자 (dufault constructor)

• 매개 변수가 없다.
• 단순 리턴만 하는 생성자이다.
디폴트 생성자라고도 한다.
• 생성자를 하나도 작성하지 않는다면 컴파일러가 자동으로 삽입한다.

※ 생성자를 하나라도 작성한다면 기본 생성자는 자동으로 삽입되지 않는다.

this 레퍼런스

• 객체 자신에 대한 레퍼런스
• 컴파일러가 자동으로 관리한다.
this.멤버 형태로 사용한다.
• 객체의 멤버 변수와 메소드의 변수 이름이 같은 경우에 필요한다.
• 다른 메소드를 호출 시 객체가 자신의 레퍼런스를 전달할 경우 사용한다.
• 메소드가 객체 자신의 레퍼런스를 반환할 때 사용한다.

public class Circle {
    public int radius;
    public String name;
    
    public Circle() { // 디폴트 생성자
        this.radius = 10;
    }
    
    public Circle(int radius) {
        this.radius = radius;
    }
    
    double getArea() {
        return 3.14 * this.radius * this.radius;
    }
}

객체 (Object)

• 클래스의 모양에 따라 생성된 실체 (instance)
• 객체 내 데이터에 대한 보호, 외부의 접근을 제한
• 프로그램 실행 중에 생성되는 실체
• 메모리 공간을 갖는 구체적인 실체
인스턴스(instance)

객체 생성

• 객체는 반드시 new 키워드를 통해서 생성해야 한다.
new 키워드 : 객체의 생성자를 호출

객체의 생성 과정

• 객체에 대한 레퍼런스 변수를 선언한다.
• 객체를 생성
• 클래스의 타입 크기의 메모리를 할당한다.
• 객체 내에 있는 생성자를 실행한다.

객체의 멤버 접근

'.' 연산자를 사용

Circle dount; // 레퍼런스 변수를 선언
donut = new Circle(); // new 연산자를 이용한 객체 생성
donut.radius = 10; //
donut.name = "도넛"; // dot(.) 연산자를 이용환 객체 멤버 접근

double donutArea = donut.getArea();



상속 (Inheitance)

• 객체 지향의 특성 중 하나
• 상위 개체의 속성을 하위 개체가 물려받음
• 하위 개체가 상위 개체의 속성을 모두 가지는 관계를 형성
• ex) 유전적 상속 관계

자바의 상속

• 자식 클래스가 부모 클래스의 속성을 물려받아 클래스의 기능을 확장한다.
• 부모 클래스 : 슈퍼 클래스
• 자식 클래스 : 서브 클래스, 부모 클래스를 재사용하여 새로운 특성을 추가

※ 자바는 클래스 다중 상속이 없다.
※ 인터페이스 다중 상속은 허용



다형성 (Polymorphism)

• 객체 지향의 특성 중 하나
같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현하는 것

메소드 오버로딩

같은 이름이지만 다르게 동작하는 여러 메소드
• 매개변수의 개수나 타입이 서로 다르다.
• 리턴 타입은 오버로딩과 관련없다.

class MethodOverloading {
    public int getSum(int i, int j) {
        return i + j;
    }
    
    public int getSum(int i, int j, int k) {
        return i + j + k;
    }
}

메소드 오버라이딩

• 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현하는 것



메소드

• 클래스의 멤버 함수
• 자바의 모든 메소드는 클래스 안에 있어야한다.(캡슐화)

접근 지정자

• public
• private
• protected
• 디폴트(접근 지정자 생략)

리턴 타입

• 메소드가 반환하는 값의 데이터 타입

public double getArea(int radius) { // 접근 지정자, 리턴 타입, 메소드 이름, (메소드 인자)
    return 3.14 * radius * radius; // 메소드 코드
}

인자 전달 방식

1. 기본 타입 값 전달
• 값이 복사되어서 전달된다.
• 메소드의 매개변수가 변경되어도 호출한 실제 인자 값은 변경되지 않는다.
• byte, int, double 등

public double getArea(int radius) {
    return 3.14 * radius * radius;
}

2. 객체 또는 배열 전달
• 객체나 배열의 레퍼런스를 전달 (객체 또는 배열이 복사되어 전달되는 것이 아니다.)
• 메소드의 매개변수와 호출한 실제 객체나 배열을 공유하는 것

public void increaseRadius(Circle c) {
    c.radius++;
}
profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글

관련 채용 정보