반응형
- 해당 내용은 백기선 님의 자바 온라인 스터디 공부 및 제출 목적
-> https://github.com/whiteship/live-study/issues/5
목표
- 자바의 Class에 대해 학습하세요.
학습할 것 (필수)
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메소드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
1. 클래스 정의하는 방법
- 클래스(Class) 란?
- 객체들의 협력 관계를 코드로 옮기는 도구.
- 객체지향 프로그래밍에서 객체를 정의해주는 틀. - Java에서의 클래스
- 필드, 생성자, 메소드로 구성.- 필드(Field) : 객체지향에서 속성에 해당하며, 데이터가 저장되는 공간.(=멤버 변수).
- 생성자(Constructor) : 변수에 초기값을 대입하여 사용하는 것처럼, 클래스도 동일한 형식으로 생성하여 초기화를 해주는 역할.
- 메소드(Method) : 객체지향에서 기능(행위)에 해당하며, 클래스를 사용하여 메소드 내에서 정의된 행위를 실행.
- 위의 그림을 예로 들어보면 "과일"이란 Class 는, "사과, 수박, 바나나"라는 필드(변수)가 있으며, "판매"라는 메소드로 구성되어 있다.
- 위의 클래스 예제를 코드로 작성하면 아래와 같습니다.
// 클래스
public class Fruit {
// 필드(멤버변수)
String apple;
String watermelon;
String banana;
// 기본 생성자(생략 가능)
public Fruit(){
}
// 파라미터를 가진 생성자(생략 불가능)
public Fruit(String apple){
this.apple = apple;
}
// 메소드
public String getApple(){
return this.apple;
}
public void setApple(String apple){
this.apple = apple;
}
public int sale(String apple){
return apple * 10000;
}
}
- 접근 지정자
- 자바(Java) 에서는 클래스를 생성(정의)할 때 class 라는 키워드를 사용
- 접근 지정자 : 외부클래스에서 해당 클래스에 접근하는 범위를 제한
- public, protected, default, private
접근 지정자 | 클래스 내부 | 동일 패키지(폴더) | 하위 클래스 | 그 외 영역 |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
2. 객체 만드는 방법 (new 키워드 이해하기)
- 객체 만들기
- 정의한 클래스를 사용하기 위해서는 클래스로부터 객체를 생성해야 사용이 가능하다.(클래스 인스턴스화)
- new 키워드를 통해 객체를 만든다.
- new 키워드를 사용하면 메모리 힙 영역에 데이터를 저장할 영역을 할당 받고, 해당 영역의 주소를 객체에게 반환.
- 클래스의 구조 중 "생성자"는 객체 생성에 사용된다. - 위에서 만든 Fruit 클래스를 객체로 생성하는 코드는 아래와 같다.
public static void main(String[] args){
String apple;
// 기본 생성자로 객체 생성
Fruit fruit = new Fruit();
// 파라미터를 가진 생성자로 객체 생성
Fruit fruit_2 = new Fruit(apple);
}
3. 메소드 정의하는 방법
- 클래스 내부의 메소드는 선언(=정의)과 호출(=실행)으로 구성.
- 선언 : 접근지정자, 리턴타입, 메소드명, 파라미터로 구성.
- 호출 : 메소드의 기능을 호출하여 실행.
- 메소드는 리턴타입이 있을 수 있고, 없을 수도 있다.
- 매개변수(파라미터)도 있을 수 있고, 없을 수도 있다.
// 접근지정자 리턴타입 메소드명(파라미터)
// 리턴 O, 매개변수 X
public String getApple(){
return this.apple;
}
// 리턴 X, 매개변수 O
public String setApple(String apple){
this.apple = apple;
}
3-1. 메소드 오버로딩(Method Overloading)
- 파라미터(매개변수)의 갯수나 타입이 다른 경우에 동일한 이름의 메소드명을 사용해 메소드를 재정의.
- 파라미터는 동일하고, 리턴 타입이 다른 경우에는 메소드 오버로딩이 성립하지 않음.
- 리턴 타입과 파라미터의 이름이 오버로딩에 영향을 주지 않음.
- 대표적으로, System.out.println()
- 메소드 오버로딩을 사용하면, 하나의 이름으로 다양한 기능을 사용할 수 있어 편의성을 더해줌.
// 같은 이름의 메소드지만 행위는 다르다.
public String getApple(){
return this.apple;
}
public String getApple(String banana){
this.apple = banana;
return this.apple;
}
// 파라미터의 값에 따라 결과가 다르다.
System.out.println("메소드");
System.out.println("오버라이딩");
3-2. 메소드 오버라이딩(Method Overriding)
- 상위 클래스가 정의한 메소드를 하위 클래스가 가져와 행위를 변경하거나 확장.
- 하위 클래스에서 상위 클래스의 메소드를 재정의하는 기법.
- 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하기 때문에, 확장과 변경에 용이함.
public class Fruit{
public void hello(){
System.out.println("나는 과일입니다.");
}
}
public class banana extends Fruit{
// Fruit 클래스의 hello 메소드를 오버라이딩하여 새로 정의
@Override
public void hello(){
System.out.println("나는 과일 중 바나나입니다.");
}
}
4. 생성자를 정의하는 방법
- 클래스를 생성하고 객체를 호출할 때 객체를 초기화하기 위해 사용.
- 기본 생성자, 묵시적 생성자, 명시적 생성자로 구분.
- 기본 생성자 : 클래스 내부에 선언된 생성자가 없는 경우. 객체 생성 시 컴파일러가 자동으로 생성해주는 생성자.
- 묵시적 생성자 : 파라미터 값을 가지지 않는 생성자.
- 명시적 생성자 : 파리미터 값을 가지는 생성자.
- 메소드와 비슷하지만, 클래스 이름으로 되어있으며, 리턴 타입이 없다.
- 모든 클래스는 생성자를 가진다.(생략하면 컴파일러가 자동으로 기본 생성자를 생성)
// 기본 생성자(생략 가능)
public Fruit(){
}
// 묵시적 생성자
public Fruit(){
System.out.println("묵시적 생성자");
}
// 명시적 생성자
public Fruit(String apple){
this.apple = apple;
}
5. this 키워드 이해하기
- 객체 자신을 의미.
- 클래스가 인스턴스화 되었을 때, 자기 자신의 메모리 주소를 가진다.
- 클래스 내부의 필드 이름과 메소드를 통해 넘어온 파라미터의 변수명이 같은 경우, this 키워드를 이용하여 구분할 수 있다.
- 객체 내부에서 필드에 접근하기 위해 this 를 사용할 수 있다.
public class Fruit{
String apple;
public String setApple(String apple){
// this를 통해 해당 클래스에서 apple의 변수를 가져온다.
this.apple = apple;
}
}
참고
- https://www.notion.so/Live-Study-5-75f857b63e524d33914a8b3ec6e1e894
반응형
'Study > Java(Online-Study)' 카테고리의 다른 글
7주차 과제 : 패키지 (0) | 2021.07.19 |
---|---|
6주차 과제: 상속 (0) | 2021.07.17 |
4주차 과제: 제어문 - 이론(1) (0) | 2021.06.20 |
3주차 과제 : 연산자 (0) | 2021.06.19 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.20 |