[Do it! 첫 코딩] 04장 코딩 종합선물세트, 클래스를 열어보자
Ⅰ 클래스(Class, Classification)
1. 뜻 : 어떤 공통된 특징에 따라 '분류'하여 만든 코딩 종합선물세트
2. 특징
(1) 각각의 기능을 구분하여 하나로 묶고 '이 기능은 저기에 한 번, 저 기능은 여기에 한 번'식으로 쏙쏙 빼서 쉽게 사용할 수 있게 만든 것.
(2) 클래스를 선언하는 부분은 대부분 별도의 파일에 저장된다.
(3) 클래스의 이름 첫 자는 대문자로 한다.
3. 객체지향형 프로그래밍(Object Oriented Programming) : 작게 구분하는 단위인 클래스를 사용해서 코딩하는 것
Ⅱ 인스턴스(instance)
1. 뜻 : '도장 자체'를 클래스라고 했을 때 '종이에 찍힌 도장 자국'을 인스턴스라고 함.
2. 특징
(1) 인스턴스의 이름 첫 자는 소문자로 한다.
3. 인스턴스 선언하기
클래스 이름 인스턴스 이름 = new 클래스 이름();
Ⅲ 생성자(Constructor)
1. 뜻 : 클래스를 선언할 때 같이 생성하는 것으로 인스턴스의 변수에 값을 넣는 과정을 간단히 표현할 수 있게 해준다.
2. 클래스의 변수와 생성자의 변수 구분법
: 클래스에서 만들어진 변수 앞에 this를 붙인다.
Ⅳ 상속
1. 상속 기본형
class 서브클래스 extends 슈퍼클래스{
}
2. 서브클래스에서 super
: 슈퍼클래스의 생성자를 호출함.
3. 오버라이드(Override) : 슈퍼클래스의 메서드를 서브클래스에서 같은 이름의 메서드로 다시 정의하는 것
* 오버로딩(Overloading) : 같은 이름의 메서드에 다른 변수를 더한 메서드를 만든다.
Ⅴ 패키지(package)
1. 뜻 : 클래스 끼리를 묶어주는 것
2. 예시
package ABC_Company;
class 햄선물세트{
....
package ABC_Company;
class 카놀라유선물세트{
....
package ABC_Company;
class 참치선물세트{
....
Ⅵ 접근제어자(Access Modifier)
1. 뜻 : 소유권을 정의해 주는 수식어
2. 종류
public | 아무나 접근 가능 |
private | 클래스 안에서만 접근 가능 외부에서는 접근 불가능 |
protected | 같은 패키지 안에서만 접근 가능 또는 상속을 받은 경우 접근 가능 |
아무것도 없을 때 | 같은 패키지 안에서만 접근 가능 |
3. private으로 선언된 변수 수정하기
(1) set 변수이름 : 변수의 값을 수정할 수 있다.
(2) get 변수이름 : 변수의 값을 가져올 수 있다.
Ⅶ 종합 실습
슈퍼클래스 파일 | 서브클래스 파일 | 인스턴스 파일 | |
1단계 클래스 선언하기 |
class 참치선물세트{ int 일반; int 야채; int 고추; } |
||
2단계 생성자 만들기 |
class 참치선물세트{ int 일반; int 야채; int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } } |
||
3단계 인스턴스 선언하기 |
class 참치선물세트{ int 일반; int 야채; int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } } |
참치선물세트 참03호 = new 참치선물세트(12, 3, 3); | |
4단계 메서드 추가하기 |
class 참치선물세트{ int 일반; int 야채; int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } int 총합(){ int 전체개수; 전체개수 = this.일반 + this.야채 + this.고추; return 전체개수; } void 출력(String 세트이름){ 코딩별.출력(“** ” + 세트이름 + “ 내용물 **”); 코딩별.출력(“일반참치:” + this.일반); 코딩별.출력(“야채참치:” + this.야채); 코딩별.출력(“고추참치:” + this.고추); } } |
참치선물세트 참03호 = new 참치선물세트(12, 3, 3); | |
5단계 메서드 사용하기 |
class 참치선물세트{ int 일반; int 야채; int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } int 총합(){ int 전체개수; 전체개수 = this.일반 + this.야채 + this.고추; return 전체개수; } void 출력(String 세트이름){ 코딩별.출력(“** ” + 세트이름 + “ 내용물 **”); 코딩별.출력(“일반참치:” + this.일반); 코딩별.출력(“야채참치:” + this.야채); 코딩별.출력(“고추참치:” + this.고추); } } |
참치선물세트 참03호 = new 참치선물세트(12, 3, 3); int 총개수 = 참03호.총합(); 참03호.출력(“참치선물세트 03호”); |
|
6단계 상속하기 |
class 참치선물세트{ int 일반; int 야채; int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } int 총합(){ int 전체개수; 전체개수 = this.일반 + this.야채 + this.고추; return 전체개수; } void 출력(String 세트이름){ 코딩별.출력(“** ” + 세트이름 + “ 내용물 **”); 코딩별.출력(“일반참치:” + this.일반); 코딩별.출력(“야채참치:” + this.야채); 코딩별.출력(“고추참치:” + this.고추); } } |
class 특별세트 extends 참치선물세트{ int 햄; int 카놀라유; 특별세트(int 일반, int 햄, int 카놀라유){ super(일반, 0, 0); this.햄 = 햄; this.카놀라유 = 카놀라유; } void 출력(String 세트이름){ super.출력(세트이름); 코딩별.출력(“ 햄:” + 햄); 코딩별.출력(“ 카놀라유:” + 카놀라유); } } |
참치선물세트 참03호 = new 참치선물세트(12, 3, 3); int 총개수 = 참03호.총합(); 참03호.출력(“참치선물세트 03호”); 특별세트 특01호 = new 특별세트(6, 3, 2); 특01호.출력(“특별세트 01호”); |
7단계 접근제어자 붙이기 |
public class 참치선물세트{ private int 일반; private int 야채; private int 고추; 참치선물세트(int 일반, int 야채, int 고추){ this.일반 = 일반; this.야채 = 야채; this.고추 = 고추; } int 총합(){ int 전체개수; 전체개수 = this.일반 + this.야채 + this.고추; return 전체개수; } void 출력(String 세트이름){ 코딩별.출력(“** ” + 세트이름 + “ 내용물 **”); 코딩별.출력(“일반참치:” + this.일반); 코딩별.출력(“야채참치:” + this.야채); 코딩별.출력(“고추참치:” + this.고추); } public void set 일반(int 일반){ if(일반 < 0){ 일반 = 0; } this.일반 = 일반; public int get 일반(){ return this.일반; } } |
class 특별세트 extends 참치선물세트{ int 햄; int 카놀라유; 특별세트(int 일반, int 햄, int 카놀라유){ super(일반, 0, 0); this.햄 = 햄; this.카놀라유 = 카놀라유; } void 출력(String 세트이름){ super.출력(세트이름); 코딩별.출력(“ 햄:” + 햄); 코딩별.출력(“ 카놀라유:” + 카놀라유); } } |
참치선물세트 참03호 = new 참치선물세트(12, 3, 3); int 총개수 = 참03호.총합(); 참03호.출력(“참치선물세트 03호”); 특별세트 특01호 = new 특별세트(6, 3, 2); 특01호.출력(“특별세트 01호”); |