코딩 기본 다지기 - 04. 클래스, 생성자, 접근제한자, 패키지, 상속
이 포스팅은 아래 영상을 배우고 정리하는 용도임을 밝힙니다.
https://www.youtube.com/watch?v=OzeMY-n948g
[Review]
클래스가 뭐였지?
"객체의 틀" "객체를 만들어내는 틀"
클래스를 만들려면 어떻게 해야 할까?
class MyClass {
private int count;
public boolean isActivated;
public int annCount() {
if(isActivated) count++;
}
class MyClass { <-- 클래스 이름을 설정하고
{
private int count;
public boolean isActivated;
public int annCount() {
if(isActivated) count++;
}
-----> }(중괄호) 안에 클래스에 필요한 함수와 변수를 구현해준다.
생성자
클래스를 만들 때 필요에 따라 생성자(Constructor)라는 특수한 함수를 만들기도 한다.
클래스를 통해 new연산자로 객체를 생성할 때 처음 한 번만 호출되는 함수
MyClass object = new MyClass(); -> 이것이 생성자!
객체의 초기 상태를 만드는 명령구문을 실행한다.
Public class MyClass {
private int count;
public boolean isActivated;
public MyClass(boolean isActivated)
{
this.isActivated = isActivated;
}
public int annCount() {
if(isActivated) count++;
}
}
위 분홍색 부분이 생성자가 구현된 모습이다.
아래는 이 생성자가 가지는 특징이다.
1. public MyClass(boolean isActivated) <--- 클래스와 이름이 같아야 한다.
{
2. public MyClass(boolean isActivated) <--- 필요에 따라 파라미터를 받아 초기화 함.
{
접근제한자(access modifier)
Public class MyClass {
private int count;
public boolean isActivated;
public MyClass(boolean isActivated)
{
this.isActivated = isActivated;
}
public int annCount() {
if(isActivated) count++;
}
}
자바는 객체지향 언어로써 클래스로 생성한 객체들의 집합으로 프로그램을 만들어낸다.
하나의 객체가 다른 객체를 만들어내고
그 객체가 가진 함수나 변수를 사용하여 더 큰 기능을 가능하게 하는 프로그램을 완성하는 구조이다.
하지만 클래스가 모든 함수와 변수를 사용할 수 있게 열어둔다면?
외부 클래스가 바꾸지 말아야 할 변수나 내부에서만 사용되는 함수까지 사용되면 프로그램에 오류가 날 수 있다.
이와 같은 문제를 막기 위해 사용하는 것이 바로 위와 같은 접근제한자이다.
접근제한자의 종류
public
모든 접근을 허용
private
클래스 내부에서만 접근
protected
클래스 내부, 같은패키지, 상속받은 클래스에서만 접근
(default)
클래스 내부, 같은 패키지에서만 접근
변수나 함수에는 모든 접근제한자 사용이 가능하지만
클래스에는 public과 기본상태만 사용 가능하다.
<패키지, 상속>
패키지
클래스를 묶어 배포하는 단위
자바의 소스 폴더 안에는 원하는 이름으로 폴더들을 만들 수 있는데
이 폴더 구조가 바로 패키지의 이름이 된다.
패키지의 이름은 폴더구조를 점으로 구분하여 나타낸다.
패키지 폴더 안에 클래스를 만들 때 클래스 파일은
클래스이름.java로 생성해야한다.
*1개의 클래스는 1개의 파일로 이루어진다.
다른 패키지의 클래스를 사용할 때는 클래스 소스코드 최상단에 패키지명을 import해주면 된다.
import com.youtube;
*패키지 간에는 접근제한자로 사용을 제한할 수 있다.
상속
클래스의 변수와 함수를 다른 클래스에게 물려주는 기능
멤버를 물려준 클래스를 슈퍼클래스
멤버를 물려받은 클래스를 서브클래스라고 부른다.
다음과 같이 클래스 명 뒤에 상속받을 수퍼클래스를 extends와 함께 기술하면 된다.
public class Myclass extends SuperClass {
private int count;
public boolean isActivated;
public MyClass(boolean isActivated)
{
this.isActivated = isActivated;
}
public int annCount() {
if(isActivated) count++;
}
}
예를 들어 동물을 상속을 사용한 클래스로 구현한다고 생각해보자.
동물의 기본적인 속성과 행동은?
기본적인 속성과 행동은 위와 같은 것이다.
이런 공통적인 부분을 동물이라는 슈퍼클래스로 만들어두고
독수리의 나는 행동, 개구리의 뛰는 행동, 뱀처럼 기어다니는 행동 등
세부 동물의 특징적인 부분들만 각각의 서브클래스로 구현한다면
공통 부분은 수퍼클래스에서 한 번에 추가나 수정을 할 수 있고
다른 부분은 수퍼클래스를 상속받아 언제나 새로 만들어낼 수 있다.
뼈대가 되는 부분만 수퍼클래스로 만들면
다른 사람들이 상속을 받아 살을 붙여 서브클래스를 만들 수 있기 때문에
협업에서 굉장히 큰 힘을 발휘한다.
'프로그래밍 독학 > 코딩 기본 다지기' 카테고리의 다른 글
트리의 불균형을 해소하기 위한 방법 - AVL tree, Red_Black tree (0) | 2020.04.30 |
---|---|
코딩 기본 다지기 - 5. 추상클래스, 인터페이스, 오버로딩, 오버라이딩, 캐스팅 (0) | 2020.04.28 |
코딩 기본 다지기 - 03. 참조형 변수, 함수, 클래스 (0) | 2020.04.19 |
코딩 기본 다지기 - 02. 메모리, 자료형 - 기본 자료형 (0) | 2020.04.18 |
코딩 기본 다지기 - 01. 코딩의 구조, 명령구문을 이루는 요소 (0) | 2020.04.18 |