Java 수업 - 객체와 생성자, 상속, 오버로딩, 오버라이딩

김지원·2022년 6월 12일
0

Java

목록 보기
35/38
Stack -         [ dog1 ]               [ dog2 ]
                   ⎮                      ⎮
Heap -    [ name setName( ) ]    [ name setName( ) ]

Stack한 박스와 heap 한 박스씩 연결된다.

Dog dog1 = new Dog();
Dog dog2 = new Dog();

dog2 = new Dog(); heap영역의 새로운 다른 애랑
연결 원래 연결 되있던애Dog dog2 = new Dog();는 쓰레기가 된다.
자바에서 알아서 버려준다.

접근제어자

• 클래스나 멤버의 사용을 제어하기 위해서 사용
• 접근제어자는외부에서접근할수있는정도와범위를정해줌

• public : 접근 제한이 없음
• protected : 같은 패키지나 자식 클래스에서 접근 가능
• default : 같은 패키지 내에서만 접근 가능
• private : 같은 클래스 내에서만 접근 가능

접근자와 설정자

• 캡슐화(정보 은닉) : 구현의 세부 사항을 클래스 안에 감추는 것
• 클래스 안의 데이터를 외부에서 마음대로 변경하지 못하게 하는 것
• 외부에서 변수는 감추고, 메소드는 사용할 수 있도록 클래스를 생성

• getter : 변수 값(필드 값)을 반환하는 접근자
• setter : 변수 값(필드 값)을 설정하는 설정자

getter, setter : 중요한 정보는 감추고 외부에서 전혀 상관없는 애가 변수값을 바로바로 사용하지 못하게 한다.

get : 변수를 반환한다.
set : 매개변수를 받아와서 그 변수값에 값을 넣어준다.

this에 대해서도 알아보자.

this가 붙으면 클래스변수나 인스턴스변수이고 클래스 안에있는 변수를 의미힌다.
this.password = password;
여기서 왼쪽 password 는 인스턴스변수이다.
this를 붙이지 않으면 둘 다 매개변수가 되어버린다.

< 결과 >
return password + "test!";
getter의 반환값에 test!를 붙여주었다. 모든 출력에 test!가 붙게 된다.

getter,setter을 사용하는 이유 :
바로 사용할 수 있는게 아닌 메소드를 거쳐야하기때문에 이것을 사용한다.
Account 를 사용하는 사람만 제어할 수 있기 때문이다.


생성자

• 인스턴스를 생성할 때 자동으로 호출되는 메소드
• 모든 클래스는 기본 생성자를 가지고 있음
• 클래스에 생성자가 없을 경우 컴파일시 컴파일러가 자동으로 생성자를 추가함

오버로딩(OverLoading)

• 매개변수의 개수와 타입은 다르지만 이름이 같은 메소드를 여러개 개 정의하는 것
• 메소드의 기능은 같지만 매개변수의 개수와 타입이 다를 때 효율적으로 사용이 가능

숫자들의 합을 구한다는 기능은 sum이랑 sum2랑 같으니 하나의 메소드를 이용하자. 사용자는 sum이라는 하나의 이름을 쓸 수 있다.

  • 이런 것도 있다. 자료형 적고... args 여기에 들어오는 애들을 배열로 만들어준다.

< 결과 >

생성자 오버로딩(OverLoading)

• 생성자 오버로딩을 통하여 다양한 방법으로 객체를 생성
• this : 현재 객체를 나타냄
• this() : 객체의 기본 생성자 호출
• this()를 통한 다른 생성자 !
호출은 항상 첫번째 문장이여야 함


내장 클래스 외부 클래스

• 클래스 안에 클래스를 정의 가능
• 외부 클래스(outer class) : 내부에 클래스를 가지고 있는 클래스
• 내장 클래스(nested class) : 클래스 내부에 포함되는 클래스

정적 내장 클래스 : static이 붙어서 내장되는 클래스
비정적 내장 클래스 : static이 붙지 않는 내장 클래스

  • 내부 클래스(inner class) : 클래스의 멤버처럼 선언되는 내장 클래스
  • 지역 클래스(local class) : 메소드의 몸체 안에서 선언되는 내장 클래스
  • 무명 클래스(anonymous class) : 수식의 중간에서 선언되고 바로 객체화 되는 클래스

내부 클래스

• 클래스안에선언된클래스
• 외부클래스의인스턴스변수와메소드전부사용가능 • private로 선언되어 있어도 접근이 가능
• private로 선언되어 있어도 접근이 가능

지역 클래스

• 메소드안에정의되는클래스
• 접근제어지정자를가질수없음
• 지역 클래스는 abstract 또는 final로만 지정 가능

익명 클래스

• 이름이 없는 클래스
• 인스턴스를 생성할 때 블록이 있음
• 블록 안에서 클래스 내용을 재정의

상속(Inheritance)

• 다른 클래스가 가지고 있는 기능을 그대로 사용
• 부모 클래스와 자식 클래스로 구성
• IS-A 관계가 성립( ~는 ~다)


상속 관계 구현

• 다른 클래스가 가지고 있는 기능을 그대로 사용
• 부모 클래스와 자식 클래스로 구성
• 부모 클래스의 생성자는 상속되지 않음
• 다중 상속은 지원하지 않음
• final이 붙은 클래스는 상속 불가.

class 부모 클래스{
	본문 
}
class 자식 클래스 extends 부모 클래스{ 
	//부모 클래스의 멤버들을 상속받음
	본문 
}

오버라이딩(Overriding)

• 자식 클래스에서 부모 클래스로부터 물려받은 메소드를 다시 작성하는 것
• 부모 클래스에서 물려받은 메소드의 기능을 변경할 때
• 메소드 이름을 같게 하여 새로운 내용을 작성 (재정의)

상속과 생성자 super()

super : 부모 클래스

• 자식클래스의생성자작업시부모클래스의생성자도반드시호출해야함
• 부모 클래스의 생성자 호출은 상위 클래스를 의미하는 super()를 통해 이루어짐
• 자식 생성자 내부에 부모 클래스의 생성자를 따로 작성하지 않았다면 자동적으로 컴파일러가 자식 클래스 생성자에 super();을 추가하여 부모 클래스의 생성자를 호출함

부모 생성자 클래스에 매개변수가 있을 떄 자식 클래스에서 부모 생성자를 자동으로 호출해주는건 기본 생성자 이다. 그래서 자식 클래스를 출력해보면 아무것도 출력이 되지 않는다. 매개변수가 있을 때 super에 부모생성자에 전달할 값을 작성해야한다.

Object

• 모든 클래스의 조상격인 클래스로, 모든 클래스의 부모 클래스
• 상속을 받지 않는 독자적인 클래스는 자동으로 Object클래스를 상속함 (Ctrl+T로 상속관계 확인 가능)

class Tree extends Object{
	//본문 
}

상수 선언 / 상수 초기화 방법

보통 변수명은 대문자로 써준다.

  1. 직접 초기화해줘야한다.
    final static int NUMBER_1 = 3;

  2. 생성자에서 초기화해주는 방법.

final static int NUMBER_1;
public abc() {
	NUMBER_1 = 3
}

0개의 댓글

관련 채용 정보