[자바 기초 문법] 클래스의 구조와 정의
또 한번 진지해질게요.
한빛미디어에서 나온 책과 생활코딩을 참고해서 직접 정리한 내용들입니다.
퍼가실 일은 없으나 공부에 잘 활용하셔도 좋으나
긁어서 과제제출이나 내가 쓴 글이요오 ~ 이런건 아니됩니다 ^^
[접근제한] [클래스 종류] class 클래스명
접근제한(public) - 말그대로 클래스를 접근해서 생성하고 사용하는 것에 "제한"을 두겠단 의미로 정의할 수 있다.
클래스 종류 - 현재 클래스가 어떤 클래스인지를 설명해주는 수식어(형용사 같은 :) ㅋㅋ )의 일종이다. 최종(final) 클래스, 추상(abstract) 클래스와 같이 클래스의 종류를 나눌 수 있다.
클래스명 - 첫문자는 대문자로. 하나 이상의 단어로 만들면 TestJava 이런 식으로 단어 음마다 끊어서 대문자로 ~ 숫자가 앞에 나올 수 없음 ^^
클래스 명 뒤에 '상속에 대한 정의'와 '구현에 대한 정의' 방법이 올 수 있는데, 차차 공부하도록 한다.
Class Ex1{
}
일반적인 클래스 선언이 위와 같다. 이는 [접근제한]과 [클래스 종류]가 생략된 일반적인 방법이고, { } 로 둘러싸인 부분을 클래스 영역이라고 한다.
이 안에 [멤버 필드]와 [생성자], [멤버 메서드]를 정의한다.
멤버 필드
변수와 상수를 속성(자료)라고도 하는데, 이것은 객체가 만들어질때 그 객체의 특징적인 속성을 담아두는 것이다.
여기서 필드가 static이냐 instance냐에 따라 필드 개념이 달라진다. 일단 무시하고 넘어 가는데 멤버 필드라고 불리는 아이는 자료, 즉 현물 정의하는 기초적 단위로 생각하면 될듯하다
뭐 쉽게 말해 닭갈비 만들려고 시장가서 생닭과 파, 고추장 후추 등을 사는 일이 먼저이지 않나? 닭갈비 라는 큰 요리르 하는 데 있어서 필요한 재료들 아니겠나
그게 바로 멤버 필드 란 놈이다. 클래스 라는 큰 요리를 하는 데 있어서 마트가서 장봐와야할 새끼.
멤버 메서드
메서드는 특정한 일을 수행하는 행위. 즉 동작(action)을 의미한다.
멤버 필드를 가지고 작업을 수행할 수도 있고 메서드도 static 메서드(클래스 메서드)와 instance 메서드 라는 두 가지 종류가 있다.
간단히 말하자면 static 메서드는 메서드를 가지는 객체를 생성하지 않아도 사용할 수 있지만, instance 메서드는 객체를 생성해야지만 사용할 수 있다.
Class
Ex1{
Int data ; // 자료 속성, 변수 선언 , 멤버 필드
Public void
setData(int n){
Data = n ;
}
}
위 코드는 data 라는 멤버 필드의 값을 n이라는 변수값으로 지정하는 형태의 동작을 정의하는 메서드다.
이런 속성들과 동작들을 우리는 한마디로 "MEMBER" 멤버 라고 총칭한다.
class MP3P{
String color ;
int memory ; // 속성 설정 멤버 필드를 지칭함
//멤버필드 영역. 이 자리는 변수 혹은 상수가 자리한다.
//멤버 메서드 선언
public void memoryUp(int n){
memory +=n ;
}
public void setColor(String str){
color = str ;
}
}
결론을 말하자면 , 클래스는 멤버(멤버필드, 멤버메서드)라는 것을 가진다. 이다!!
객체 생성과 멤버 접근법
클래스 멤버들은 자료형을 가지는데, 자바의 자료형은 기본자료형(int, float, double,char)과 참조 자료형(객체자료형) 두가지가 있다.
위의 예시에서 MP3p 클래스처럼 개발자에의해 만들어진 "사용자 정의 클래스"등을 자료형으로 하는 참조 자료형이 있다. 이런 참조 자료형을 가지는
참조변수 즉 객체를 생성하고 사용하는 방법을 알아본다.
객체생성
객체 생성의 첫번째는 객체를 선언하는 일이다.
MP3p m3 ;
위 처럼 선언부분에서 객체가 생성되는 것이 아니라 MP3p 클래스 타입의 m3이라는 참조변수가 메모리 영역에서 주로 변수와 같이 가벼운 것들이 자리잡는
stack영역에 만들어진다.
두번째 단계는 선언된 변수에 객체를 생성하는 것이다.
M3 = new MP3p();
New라는 연산자를 통해 무조건 메모리 내에 공간을 할당받고, MP3p 클래스의 생성자를 통해 객체를 생성한 생성된 객체를 참조할 있는 참조변수를 m3에 담아준다.
"객체는 생성자라는 것에 의해 만들어진다" 라는 사실만 알자
메모리 구조영역에 대한 설명 페이지 136
#stack : 스택 영역에 자리하는 것은 주로 변수와 같이 가벼운 것
#heap : 힙영역에 자리하는 것은 객체와 같은 무거운 것들이 자리한다.
#static : 정적인 값들만 온다. 상수와 같은 정적인 값들을 의미하는데, 이는 프로그램이 끝날때까지 없어지지 않으며, 한번 생성되면 두번다시 만들어지지 않는다.
접근제한자
결국에 객체를 생성해서, 클래스 내부에 있는 속성(변수, 자료, 멤버필드)과 행동(동작, 액션 , 멤버메서드)을 가져다 쓰는데 있어서 권한이 필요하다.
아무나 와서 이 정보를 사용하고 동작한다면, 우린 뭐 위 아더월드 모두가 하나되어 살겠지 ㅋㅋ 따라서 접근을 어떤 경우엔 허락, 또 다른 경우엔 비 허락을 한다.
public : 모든 접근을 허용
protected : 같은 패키지 폴더에 있는 객체와 상속 관계의 객체들만 허용
default : 같은 패키지(폴더) 내에 있는 객체들만 허용
private : 현재 객체 내에서만 허용
멤버 접근법
클래스 내부에 있는 멤버에게 접근하기 위해서는 객체의 참조변수를 통해 '.'을 사용하여 해당 객체의 메서드나 변수에 접근할 수 있다. '.' dot 연산자라고도 하며,
사용법은 [객체 참조.멤버명] 형식이다. 위에서 정의한 MP3p 객체를 예로 들어 MP3p라는 클래스의 메서드 중 메모리의 성능을 높이는 memoryUp(int n)을 사용해보자
생성자(Constructor)
여태까지 클래스를 사용하기 위해서는
overloadingTest2 ot2 = new overloadingTest2();
인스턴스 생성자();
위와 같은 작업을 했다.
위 코드를 설명하면 overloadingTest2 라는 클래스를 new 연산자를 통해 객체를 생성해준다.
생성된 객체를 인트선트 ot2에 담아서 클래스 내부에 있는 클래스 내부에 있는 메소드들에 접근이 가능했다.
ot2.getName();
이런 방식으로 말이다.
생성자는 일종의 초기화와 같다고 생각하면 되는데, overloadingTest2 에 있는 멤버 변수들의 초기화를 시켜주는 개념이다.
이게 무슨 말인고 하니,
뭐라뭐라 짜여져 있는 calculator 라는 클래스에 new 연산자를 붙혀 생성자를 선언한다.
여태까지 new Calculator(); 여기서 Calculator(); 이것이 클래스라고 생각했는데 생성자였다.
그럼 클래스 Calculator() 내부에 생성자가 있느냐?? 여태까진 없는 놈들만 본 것이다. 없다면, 컴파일할때 디폴트값으로 알아서 정의해준다.
클래스 내부에 있는 생성자는 메소드 실행에 앞서서 실행시켜준다.
클래스와 인스턴스 그리고 객체
클래스 = 설계도 : 정의를 하고 ~
인스턴스 = 제품 : 호출을 하고 ^^
인스턴스는 구체적인 객체를 의미한다. 그 구체적인 객체가 어떤 모습이고, 어떤 변수들로 구성되어 있는지 알아보고 정의하는 것이 바로 "클래스"이다.
하드웨어적으로는 기본적으로 멤버 변수를 선언할때 int a ;
라고 선언하면 메모리라는 공간에 jvm 이라는 똑똑한 기계가 int형의 데이타가 들어갈 공간을 만들어준다.
추후에 a=10; 이라고 정의하면 그 메모리 방안에 데이타가 들어가게 된다.
또, Stirng[10] 이라고 하면 |
|
|
|
|
|
|
|
|
이런 형식으로 메모리 공간 안에 방을 만들어준다. 역시, 그 배열 내부에 어떤 값이 들어와도 ㅇㅋㅇㅋ 해줄 수 있는 것이다.
그 ㅌ은 개념으로
Calculator c1 = new Calculator();
라고 정의함으로서 넓은 의미로는 메모리 안에 데이터 타입 Calculator의 공간을 생성한 후, 참조변수 c1의 인스턴스의 공간을 확보해 두는 것과 같은 이치이다.
그렇다면…, 확보된 메모리 공간 영역 내부에서 자아유롭게 정보를 사용할 수 있게 되는 것이다.
'web > java' 카테고리의 다른 글
자바 기본 문법 - 식별자, 자료형 (0) | 2017.03.31 |
---|---|
자바 가상머신(JVM : java virtual machine) 정의 (0) | 2017.03.22 |
자바의 탄생 및 특징 (0) | 2017.03.22 |