개발/Java

Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 05)

펭귀니 :) 2019. 6. 11. 22:14

둘째마당, 자바의 핵심. 객체 지향 프로그래밍

05) 클래스와 객체 1

객체란?

개체를 먼저 정의하고 각 객체가 어떤 기능을 제공하고 객체 간 협력을 어떻게 구현할 것인지 고민

클래스란?

클래스는 객체의 속성과 기능을 코드로 구현한 것.

*클래스 이름은 대문자로 하는 게 관습

ex) '학생'이라는 객체

클래스 이름은 Student

클래스 속성은 (=특성, =멤버변수) 학번, 이름, 학년, 사는 곳

(접근 제어자) class 클래스 이름 {
	멤버 변수;
    메서드;
}

 

메서드란?

예를 들어 학생과 관련된 기능을 구현할 수 있다.

메서드 = 멤버 함수

함수 호출과 스택 메모리

함수를 호출하면 그 함수만을 위한 메모리 공간이 할당 됨.

클래스 사용과 main()함수

main( )함수에서 클래스를 사용하는 방법은 두가지

1. 우리가 만든 클래스 내부에 main( )함수를 만드는 것 (해당 클래스가 시작 클래스가 된다.)

2. 외부에 테스트용 클래스를 만들어 사용하는 것 

new 예약어로 클래스 생성

클래스형 변수이름 = new 생성자;

클래스가 생성된다는 것은 클래스를 실제 사용할 수 있도록 메모리 공간(힙메모리)에 올린다는 뜻

이렇게 실제로 사용할 수 있도록 생성된 클래스를 '인스턴스' (student1 변수와 student2변수는 각각 인스턴스)

인스턴스를 가리키는 클래스형 변수를 '참조 변수' (참조 변수.멤버 변수, 참조 변수.메서드)

생성자란?

생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것입니다.

디폴트 생성자는 자동으로 생성 됨.

생성자를 직접 만들면 디폴트 생성자는 자동으로 만들어지지 않음.

public class Person{
	string name;
    float height;
    
    public Person() {} //디폴트 생성자
    public Person(String pname){ //직접 만든 생성자
    	name = pname;
    }

=> 이렇게 생성자가 두 개 이상 제공되는 경우를 생성자 오버로드(constructor overload)라고 합니다.

 

참조 자료형이란?

기본 자료형(int, char 등)이 아니라 클래스 자료형이나 JDK에서 제공하는 클래스(string, data 등)로 선언하는 것

 

정보 은닉

접근 제어자가 필요한 이유!

public class MyDateTest {
	public static void main(String[] args){
    	MyDate date = new MyDate();
        date.month = 2;
        date.day = 31;
        date.year = 2018;
    }
}

위 코드는 2월은 28일 혹은 29일까지 있지만 31일로 대입되었다.

이러한 오류를 피하기 위해 아래와 같이 MyDate 클래스의 멤버변수를 private로 바꿔주고 get(), set()함수를 이용하자.

public class MyDate{
	private int day;
    private int month;
    private int year;
    
    public setDay(int day) {
    	if(month == 2){
        	if(day < 1 || day > 28){
            	System.out.println("오류입니다.");
            } else {
            	this.day = day;
            }
        }
    }
}
접근 제어자 설명
public 외부 클래스 어디에서나 접근할 수 있습니다.
protected 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없습니다.
아무것도 없는 경우 default이며 같은 패키지 내부에서만 접근할 수 있습니다.
private 같은 클래스 내부에서만 접근할 수 있습니다.