목표
자바의 Class에 대해 학습하세요.
클래스?
객체를 정의해 놓은것. 객체의 설계도 또는 틀.
클래스의 용도 - 클래스는 객체를 생성하는데 사용된다. 객체는 클래스에 정의된 대로 생성된다.
객체?
클래스에 정의된 내용대로 메모리에 생성된 것. 실제로 존재하는 것.
학습할 것 (필수)
- 클래스 정의하는 방법
클래스는 변수와 메서드의 집합이다.
클래스 작성규칙
1. 하나이상의 문자로 이루어져야 한다.
2. 첫번쨰 글자에는 숫자가 올 수 없다.
3. $,_ 이외의 특수문자는 사용불가.
4. 자바 명령어, 키워드는 사용할 수 없다.
5. 이름은 대소문자를 구분한다 (보통 첫번째 글자는 대문자로 작성)
키워드 'class' 다음에 '클래스이름' 을 적고, 클래스의 시작과 끝을 의미하는 괄호{}안에 원하는 코드를 넣으면 된다.
class 클래스명 {
//주석을 제외한 모든 코드는 클래스의 블럭{}내에 작성해야 한다.
public static void main(String[] args) { //main메서드 선언부
//프로그램을 실행할때 'java.exe'에 의해 호출될수있도록 항상 똑같이 적어주어야 한다.
//실행될 문장 작성
}
}
선언방법
클래스명 선언할 변수명;
변수명 = new 클래스명();
- 객체 만드는 방법 (new 키워드 이해하기)
new
new 키워드를 통해 메모리에 할당하고 생성된 인스턴스를 가리키는 참조변수를 통해 그 인스턴스의 멤버 필드나 메서드에 접근할 수 있다. 즉, 객체를 생성하지 않으면 클래서내의 멤버변수나 메서드에 접근 할 수 없다.
클래스 타입의 인스턴스를 생성(메모리(Heap영역)에 데이터를 저장할 공간을 할당받고 그 공간의 참조값을 객체에게 반환하여 주고 생성자를 호출)
- 메소드 정의하는 방법
메서드?
어떤 작업을 수행하기 위한 명령문의 집합. 주로 어떤 값을 입력받아서 처리하고 그 결과를 되돌려준다.
메서드를 사용하는 이유
반복적으로 사용되는 코드를 줄이기 위해서! (자주 사요ㅕㅇ되는 내용의; 코드를 메서드로 작성해 놓고 필요한 곳에서 호출)
그러므로 메서드 작성시
1) 하나의 메서드는 한가지 기능만 수행하도록 작성하는 것이 좋다.
2) 반복적으로 수행되어야 하는 여러 문장을 하나의 메서드로 정의해 놓으면 좋다,.
3) 관련된 여러 문장을 하나의 메서드로 만들어 놓는것이 좋다.
//리턴타입 메서드명(타입 변수명, 타입 변수명, ....)
int add(int a, int b)
{
//구현부: 메서드 호출시 수행될 코드
int res = a+b;
//호출한 메서드로 결과를 반환한다.
return res;
}
//리턴값이 없는 메서드의 리턴타입은 void
void add(int a, int b)
{
a++;
b++;
}
*넘겨받은 매개변수의 값이 유요한 것인지 확인하는것은 매우 중요!
메서드호출
같은 클래스 내의 메서드는 참조변수를 사용하지 않고도 호출 가능.
static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없음
- 생성자 정의하는 방법
생성자(Constructor)?
인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드', 인스턴스 생성시에 실행되어야 할 작업을 위해 사용된다.
생성자의 조건
1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴값이 없다.
class ClassName {
//생성자
ClassName( 타입 변수명, 타입 변수명, ....){
//인스턴스 생성 시 수행될 코드 작성
//주로 변수 초기화 코드
}
//OR
ClassName(){
//매개변수가 없는 생성자
}
}
인스턴스 생성
1. 연산자 new에 의해서 메모리(heap)에 ClassName클래스의 인스턴스가 생성된다.
2. 생성자 ClassName()가 호출되어 수행된다.
3. 연산자 new의 결과로 , 생성된 ClassName인스턴스의 주소가 반환되어 참조변수 cname에 저장된다.
ClassName cname = new ClassName();
//-> 생성자
모든 클래스는 반드시 하나이상의 생성자가 정의되어 있어야 한다. 사용자가 정의하지 않으면 컴파일러가 제공하는 기본생성자가 정의된다.
- this 키워드 이해하기
생성자간에 서로 호출가능
- 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다. ?
-> 첫줄에서만 호출이 가능한 이유: 생성자 내에서 초기화 작업 도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화 할것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해 질 수 있기 떄문.
- 참조변수로 인스턴스 자신을 가리킨다. 참조변수를 통홰 인스턴스의 멤버에 접근할 수 있는것처럼 this로 인스턴스 변수에 접근할 수 있다.
this
인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수)
생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
클래스의 멤버변수와 매개변수의 이름이 같은경우
class Car{
String wheel; //클래스의 멤버변수
public void setWheel(String wheel){ //메서드의 매개변수
this.wheel = wheel;
//변수명이 같기때문에 this가 없으면 메서드의 매개변수로 인식
}
public void setWheelType(String wheel){
wheel = wheel;
}
public String getWeel(){
return this.wheel;
}
}
public static void main(String[] args){
Car c = new Car();
c.setWheel("티타늄");
c.setWheelType("철");
c.getWheel(); //"티타늄"
}
마감일시
2020년 12월 19일 토요일 오후 1시까지.
과제 (Optional)
- int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
- int value, Node left, right를 가지고 있어야 합니다.
- BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.
- DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.
이진트리(Binary Tree)
자식노드가 최대 2개인 노드들로 구성된 트리.
정이진트리(full binary tree), 완전이진트리(complete binary tree), 균형이진트리(balanced binary tree)
참고자료
Java의 정석 (2nd Edition) 남궁성 지음 도우출판
'[STUDY] 자바_whiteship :)' 카테고리의 다른 글
9주차 과제: 예외 처리 (0) | 2021.01.13 |
---|---|
8주자 과제: 인터페이스 (0) | 2021.01.05 |
7주차 과제: 패키지 (0) | 2020.12.30 |
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.12.20 |