728x90
✍️ 학습할 것
- 클래스
- 인스턴스
- 메서드
- 생성자
- this
📌 클래스 (Class)
클래스는 객체 지향 프로그래밍(OOP)에서 사용되는 객체를 정의해놓은 것으로 인스턴스를 생성할 때 쓰인다.
다시 말하면, 객체의 속성과 기능을 하나로 묶어놓은 틀이다.
Java에서 클래스는 필드, 생성자, 메서드로 구성된다.
- 필드(속성) : 객체의 데이터를 저장하며 멤버 변수라고도 부른다.
- 생성자 : 필요한 정보를 인수로 받아 객체를 초기화한 후 반환하는 역할이다.
- 메소드 : 객체의 기능이다. 호출 시 정의된 코드를 수행한다.
class 키워드로 클래스를 정의하고 앞에 접근 지정자를 두어 외부에서 접근할 수 있는 범위를 설정한다.
// Example
public class Person {
// 필드(멤버변수)
private String name;
private int age;
// default 생성자, 생략이 가능하지만 매개변수를 가진 생성자가 있으면 반드시 명시해야한다.
public Person() {
...
}
// 매개변수를 가진 생성자
public Person(String name, int age){
this.name = name;
this.age = age;
}
// 메소드
public String getName(){
// 메소드 내부 기능
return name;
}
}
✔️ 접근 지정자
- 외부에서 클래스 내부 데이터에 손상할 수 없도록 접근 범위를 제한하는 키워드이다.
- 접근 지정자는 객체지향의 캡슐화와 관련 있다.
✔️ 클래스 작성 규칙
- Java 키워드는 사용할 수 없다.
- 첫 번째 글자는 숫자가 올 수 없다.
- 하나 이상의 문자로 이뤄져야 한다.
- $, _ 외의 특수 문자를 사용할 수 없다.
📌 인스턴스
클래스 정의대로 메모리에 생성된 데이터를 의미한다. 즉, 클래스라는 틀로 찍어낸 것이 인스턴스다.
속성(멤버 변수)과 메서드(함수)를 가진다.
✔️ new()
- 정의한 클래스로 인스턴스를 만드는 과정을 클래스의 인스턴스화라고 부른다.
- Java에서 인스턴스화 할 때 new 키워드를 사용해 생성자를 호출한다.
- 힙 영역에 메모리를 할당하고 해당 메모리에 대한 주소를 반환한다.
// Example
Person person1 = new Person(); // 기본 생성자
Person person2 = new Person("문희조", 26); // 매개변수를 가지는 생성자
System.out.println(person2.getName()); // 문희조
✔️ 객체 vs 인스턴스
보통 객체와 인스턴스는 같은 말로 많이 쓰인다. 자세히 뭐가 다르고 왜 같은 의미로도 쓰일까?
- 객체(Object) : 소프트웨어 세계에 구현할 대상
- 클래스(Calss) : 객체를 구현하기 위한 설계도
- 인스턴스(Instance) : 설계도로 소프트웨어 세계에 구현된 실체
객체는 소프트웨어적 관점에서 현실의 대상을 사유, 즉 파악한 결과이다.
이 사고의 결과 구현해내는 설계도를 클래스라고 부르고 클래스로 실체화한 결과물이 인스턴스이다.
사실 객체를 인스턴스라고 부르는 건 크게 틀린 말은 아니다. 😋😋
참고 : https://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/
📌 메서드
객체지향에서 기능을 나타내며, 객체의 어떤 동작을 함수화 한 것이다.
- 일반적인 함수의 구현과 같다.
- 객체지향의 다형성을 살리는 두 가지 기법이 존재한다.
// Example
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
✔️ 메서드 오버로딩
- 같은 이름의 메서드를 정의하는 것이다.
- 일반적으로 한 클래스 내 같은 이름의 메서드가 둘 이상일 수 없으나, 매개변수의 개수나 타입을 다르게 해서 하나의 이름으로 여러 메서드를 작성할 수 있다.
// Example
public void setUser(String name) {...}
public void setUser(String name, int age) {...}
// 대표적인 메소드 오버로딩
System.out.println("안녕하세요?")
System.out.println(1995)
System.out.println(3.141592F)
✔️ 메소드 오버라이딩
- 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것이다.
- 동작만 재정의하는 것이므로 선언부는 그대로, 내용만 변경 가능하다.
- 오버라이드 시 @Override 어노테이션으로 표시해준다.
// Example
class Parent {
void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }
}
class Child extends Parent {
@Override
void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }
void display(String str) { System.out.println(str); }
}
public class Test {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
ch.display("오버로딩된 display() 메소드입니다.");
}
}
📌 생성자
객체를 생성하고 초기화하는 메서드이다.
- private 변수에는 사용자도 프로그램도 접근할 수 없기 때문에 인스턴스를 원하는 값으로 초기화하려면 일반적인 초기화 방법으로는 할 수 없다.
- private 변수에 접근할 수 있는 초기화만을 위한 public 메서드가 바로 생성자이다.
✔️ 특징
- 클래스의 이름과 동일하고 리턴 타입이 없다.
- 생성자가 반드시 존재하고, 한 개 이상의 생성자를 가질 수 있다. (메서드라서 오버로딩이 가능하다.)
- 매개변수를 가지는 생성자가 있으면 기본 생성자가 자동으로 추가되지 않는다.
// Example
Person() // 기본 생성자, 따로 선언하지 않아도 된다.
Person(String name, int age) { // 매개변수가 있는 생성자, 기본 생성자를 선언해야 한다.
this.name = name;
this.age = age;
}
📌 this
자기 자신의 주소를 가리키는 키워드이다.
- this 키워드를 통해서 인스턴스 변수에 접근할 수 있다.
- 인스턴스 메서드에서만 사용할 수 있다.
✔️ this()
- 생성자 내부에서만 사용할 수 있는 메서드이다.
- 같은 클래스의 다른 생성자를 호출할 때 사용한다.
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
this("Hejow", 26);
}
}
'언어 공부 > Java' 카테고리의 다른 글
[Java] Java의 패키지 (0) | 2022.09.05 |
---|---|
[Java] Java의 상속 (2) | 2022.08.25 |
[Java] Java 제어문 (0) | 2022.08.16 |
[Java] Java의 연산자 (0) | 2022.08.15 |
[Java] Java의 데이터 타입, 변수 그리고 배열 (0) | 2022.08.12 |
댓글