: 슈퍼 클래스의 필드와 메소드를 물려받아 코드를 재사용함으로써, 시간과 비용을 줄여준다.
자바에서 상속 : 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장하는 개념.
부모 클래스 = 슈퍼 클래스 자식 클래스 = 서브 클래스
다형성
: 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것.
오버라이딩
: 슈퍼 클래스의 구현된 메소드를 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현되는 것.
오버로딩
: 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 것.
클래스와 객체
클래스 : 객체를 만들어 내기 위한 설계도
객체 : 클래스 모양 그대로 생성된 실체
▶객체는 클래스의 인스턴스
클래스 구성
클래스 선언
: class 키워드와 클래스 이름으로 선언
: 중괄호{ }안에 필드와 메소드 작성.
: 캡슐화의 원칙 때문에 클래스 외부에는 필드와 메소드 작성이 불가.
필드와 메소드
필드 : 객체 내에 값을 저장할 멤버 변수
메소드(함수) : 객체의 행동을 구현
접근 지정자
: public - 다른 클래스에서 활용하거나 접근 가능.
: 접근 지정자를 생략하면 디폴트 접근.
생성자
: 클래스의 이름과 동일한 메소드
: 객체가 생성될 때 자동으로 호출되는 특별한 메소드
new 연산자와 객체 생성. 레퍼런수 변수
1. 레퍼런스 변수 선언
객체를 생성하기 전, 객체를 가리킬 레퍼런스 변수를 먼저 선언.
Circle pizza;
변수 pizza는 Circle 클래스의 객체에 대한 주소일 뿐 객체가 생성된 것은 아님.
2. new 연산자 이용해 객체 생성
pizza = new Circle();
생성된 Circle 객체의 주소를 pizza 변수에 대입하는 과정.
Circle pizza = new Circle(); // 레퍼런스 변수 선언과 객체 생성 동시 수행
<new 연산자에 의해 객체가 생성되는 과정>
1. Circle 타입 크기의 메모리 할당
2. Circle() 생성자 코드 실행
객체 멤버 접근
레퍼런스 변수 뒤에 점(.)연산자를 붙여 객체의 멤버에 접근한다.
class Rectangle{
int width;
int height;
public int getArea(){
return width*height;
}
}
public class RectApp{
public stataic void main(String[] args){
Rectangle rect = new Rectangle(); // 객체 생성
rect.wdith = 10;
rect.height = 10;
rect.getArea();
}
}
생성자
객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드
객체가 생성되는 순간 자동으로 호출되는 메소드
public class Result{
int radius;
String name;
// 생성자 이름은 클래스 이름과 동일해야 함.
public Result() { // 매개변수 없는 생성자
radius = 1;
name = "";
}
public Result(int r, String n) { // 매개변수를 가진 생성자
radius = r;
name = n;
}
public double getArea() {
return 3.14*radius*radius;
}
public static void main(String[] args) {
Result pizza = new Result(10, "자바피자");
double area = pizza.getArea();
System.out.println(pizza.name + "의 면적은 " + area);
}
}
public Result(){ ... }
public void Result(){ ... } // 리턴타입 선언해서 오류 발생.
public Result(){
...
return;
} // 생성자 코드 내 return;문은 어디든 사용 가능.
기본 생성자(디폴트 생성자)
매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴만 하는 생성자
class Result{
public Result(){ }
}
기본 생성자가 자동으로 생성되는 경우
생성자가 하나도 없는 경우, 컴파일러가 기본 생성자를 자동으로 생성.
new 연산자로 객체가 생성될 때 생성자가 하나도 없는 경우, 사용자 눈에 보이지않게 기본 생성자가 자동 삽입된다.
기본 생성자가 자동으로 생성되지 않는 경우
생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자 생성하지 않는다.
ex) 매개변수를 가진 생성자만 존재하지만 매개변수 없는 new를 이용한 객체를 생성할 때 컴파일 오류 발생.
this 레퍼런스
객체 자신을 가리키는 레퍼런스
현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스
매개변수의 이름을 멤버 변수와 같은 이름으로 붙이고자 하는 경우에 사용.
public class Circle{
public int radius; // 필드 = 객체 내에 값을 저장할 멤버 변수
public Circle(int radius){
this.radius /*멤버 변수 radius*/ = radius; /* 매개변수 radius */
}
}
[Java] 클래스와 생성자
객체지향 언어 특성
: 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것.
자바에서 객체는 클래스라는 캡슐을 사용. 필드(멤버 변수)와 메소드(멤버 함수)로 구성.
: 하위 개체가 상위 개체의 속성을 모두 가지는 관계.
: 슈퍼 클래스의 필드와 메소드를 물려받아 코드를 재사용함으로써, 시간과 비용을 줄여준다.
자바에서 상속 : 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장하는 개념.
부모 클래스 = 슈퍼 클래스 자식 클래스 = 서브 클래스
: 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것.
오버라이딩
: 슈퍼 클래스의 구현된 메소드를 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현되는 것.
오버로딩
: 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 것.
클래스와 객체
클래스 : 객체를 만들어 내기 위한 설계도
객체 : 클래스 모양 그대로 생성된 실체
▶객체는 클래스의 인스턴스
클래스 구성
: class 키워드와 클래스 이름으로 선언
: 중괄호{ }안에 필드와 메소드 작성.
: 캡슐화의 원칙 때문에 클래스 외부에는 필드와 메소드 작성이 불가.
필드 : 객체 내에 값을 저장할 멤버 변수
메소드(함수) : 객체의 행동을 구현
: public - 다른 클래스에서 활용하거나 접근 가능.
: 접근 지정자를 생략하면 디폴트 접근.
: 클래스의 이름과 동일한 메소드
: 객체가 생성될 때 자동으로 호출되는 특별한 메소드
new 연산자와 객체 생성. 레퍼런수 변수
1. 레퍼런스 변수 선언
객체를 생성하기 전, 객체를 가리킬 레퍼런스 변수를 먼저 선언.
변수 pizza는 Circle 클래스의 객체에 대한 주소일 뿐 객체가 생성된 것은 아님.
2. new 연산자 이용해 객체 생성
생성된 Circle 객체의 주소를 pizza 변수에 대입하는 과정.
<new 연산자에 의해 객체가 생성되는 과정>
1. Circle 타입 크기의 메모리 할당
2. Circle() 생성자 코드 실행
객체 멤버 접근
레퍼런스 변수 뒤에 점(.)연산자를 붙여 객체의 멤버에 접근한다.
생성자
객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드
객체가 생성되는 순간 자동으로 호출되는 메소드
생성자 특징
: new를 통해 객체가 생성될 때, 생성자는 자동으로 한 번만 호출된다.
: 리턴 타입을 선언하면 안되고, 리턴 타입이 없어 void를 리턴 타입으로 선언해도 안된다.
: 생성자에서 return;문을 사용하면 안된다는 것은 별개이다.
기본 생성자(디폴트 생성자)
매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴만 하는 생성자
기본 생성자가 자동으로 생성되는 경우
생성자가 하나도 없는 경우, 컴파일러가 기본 생성자를 자동으로 생성.
new 연산자로 객체가 생성될 때 생성자가 하나도 없는 경우, 사용자 눈에 보이지않게 기본 생성자가 자동 삽입된다.
기본 생성자가 자동으로 생성되지 않는 경우
생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자 생성하지 않는다.
ex) 매개변수를 가진 생성자만 존재하지만 매개변수 없는 new를 이용한 객체를 생성할 때 컴파일 오류 발생.
this 레퍼런스
객체 자신을 가리키는 레퍼런스
현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스
매개변수의 이름을 멤버 변수와 같은 이름으로 붙이고자 하는 경우에 사용.
메소드가 객체 자신의 레퍼런스를 리턴하는 경우에 사용.
this( )로 다른 생성자 호출
클래스 내에 생성자가 다른 생성자를 호출할 때 사용
객체 치환 시 주의할 점
다음과 같이 = 연산자를 이용해 객체를 치환하면 ob1은 ob2와 같은 객체를 가리키기 된다.
그러면 ob1이 원래 가리키던 객체를 아무도 가리키지 않게 되어 프로그램에서 접근할 수 없는 상태가 된다.
가비지 : 아무도 가리키지 않는 객체가 되어 프로그램에서 접근할 수 없음
'Back-End > Java' 카테고리의 다른 글