언어/JAVA
[JAVA] Class
hvoon
2022. 9. 7. 17:39
-프로그램으로 처리하고자 하는 대상을 자료화하여 하나의 자료형으로 정의한 사용자 정의 자료형
-쉽게 말해 필요에 의해 기본 자료형(int, double, char 등)외에 새롭게 정의한 자료형
-한 개 이상의 자료, 하나 이상의 자료형을 저장할 수 있는 복합 자료형
-자바의 프로그램 단위는 클래스임
-하나의 프로그램 파일(XXX.java) 안에는 여러 개의 클래스를 넣어서 사용할 수 있음
-여러개의 클래스 중 파일이름과 같은 이름을 쓰는 클래스를 public으로 지정함
-그 클래스에는 보통 public static void main(){}이 존재. 이 클래스는 자료형으로서의 클래스이기 보단 프로그램 실행단위로서의 클래스임
-만들어서 사용하거나, import해서 사용할 클래스는 자료저장&가공용 클래스임
// 만드는 법: class라는 키워드를 이용하여 만듦
class 클래스이름{
// member field, property, member variable, field
int 변수1; // 한글로 변수를 만들 수 있지만 오류시 원인을 찾기 힘듦
double 변수2;
String 변수3;
int[]배열=new int[5];
// member method
public void 메서드1() {}
public static void 메서드2(){}
}
//클래스 first 생성
class First{
int n1;
int n2;
// 속성(멤버필드, 멤버변 수, 필드): 클래스에 속한 정보(변수)들
// 속성은 변수로 생성하여 클래스의 멤버필드라고도 호칭
}
public class Class01 {
public static void main(String[] args) {
// 클래스변수의 선언
First a1;
// 새로 만들어진 클래스의 변수는 위와 같이 생성함
// 생성된 변수는 래퍼런스(참조)변수임
// 배열 때와 마찬가지로, new 명령을 이용하여 HEAP 영역에
// 적정 공간(클래스가 정의된 크기만큼)을 확보한 후
// 그 주소를 a1변수에 저장하여 사용함
// 래퍼런스 변수와 new에 의해 만들어진 공간이 합쳐지면 이를 객체라고 부름
a1=new First();
// 위와 같이 공간이 할당되면 이제부터 n1, n2 변수가 a1이라는 이름과 함께 사용이 가능함
// new First()로 생성된 새로운 공간을 뉴인스턴스라고 부를 예정
First a2=new First();
// 객체가 두개가 만들어지면 a1에도 n1, n2가 생성되고
// a2에도 n1, n2가 생성되므로
// 그들을 구분하기 위해
// a1.n1 / a1.n2 / a2.n1 / a2.n2 로 사용함
System.out.println(a1.n1);
System.out.println(a1.n2);
a2.n1=30;
a2.n2=40;
System.out.println(a2.n1);
System.out.println(a2.n2);
}
}
멤버 메서드(member method)
: class에 소속되어 class 객체에 종속된 method
-멤버 메서드는 특별한 경우를 제외하곤 static을 사용하지 않음
-정적(static): 처음부터 만들어지는 이라는 뜻. 정적멤버를 선언할 때 사용함
class Animal{
String name;
int age;
public void output() {
System.out.printf("name is %s, age is %d \n", name, age);
}
public void input() {
name="molly";
age=14;
// output(); // 클래스 내부에 함께 있는 멤버 메서드들간은 서로 호출이 자유로움
}
// 멤버메서드는 클래스형으로 생성된 객체 "전용" 메서드임
// 메서드의 실행이 객체전용으로만 사용된다는 뜻
// 멤버메서드의 내용을 객체와 상관없는 명령이 들어갈 수도 있지만
// 보통은 멤버변수들의 조작, 출력, 입력을 위한 명령들로 주로 구성됨
public void inputWithParam(String n, int a) {
name=n;
age=a;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// 현재 프로그램(패키지 내의 같은 파일)에서만 사용한다는 가정하에 public도 생략 가능
}
public class Class02 {
public static void main(String[] args) {
Animal a1=new Animal(); // 객체 생성
a1.name="dog"; // save member variable
a1.age=20; // save member variable
a1.output(); // 멤버변수처럼 앞에 소속된 객체이름이 오지 않으면 사용할 수 없음
// output(); ->error
Animal a2=new Animal();
a2.input();
a2.output();
Animal a3=new Animal();
a3.inputWithParam("bella",10);
a3.output();
System.out.println("name: "+a3.name+", age: "+a3.age);
String name=a3.getName();
int age=a3.getAge();
System.out.println("name: "+name+", age: "+age);
// 어떤 멤버 메서드를 만들고 사용해야 하는가에 대한 정답은 없음
// 개발자 판단 및 프로그램의 필요성에 의해 설계하고 제작되는 메서드를
// 잘 만들고 잘 사용하면 됨
}
}
-멤버메서드의 주된 목적은 멤버변수의 값을 저장하거나 얻어오거나 그 둘의 목적이 비교적 크기 때문에 특정멤버메서드(저장하고 얻어오는 메서드)를 별도의 사유가 없어도 멤버변수에 따라 필요한 만큼 만들고 시작하는 경우 많음
-메서드의 이름 setter와 getter라는 이름을 사용하는 두 개의 메서드임
class GetSetTest {
private int intVar;
private double doubleVar;
private String stringVar;
//멤버 변수가 하나 만들어지면 그변수에 전달값을 저장할 수 있는 메서드와
// 값을 얻어낼 수 있는 메서드를 생성함
// getter와 setter의 자동 생성
// 현위치에서 마우스 오른쪽 버튼 클릭
// source 메뉴
// generate getters and setters 클릭
// selectAll 클릭
// generate 클릭
public int getIntVar() {
return intVar;
}
public void setIntVar(int intVar) {
this.intVar = intVar;
// 멤버변수와 매개변수의 이름이 같은 경우 멤버변수에 this. 을 붙여서 구분함
}
public double getDoubleVar() {
return doubleVar;
}
public void setDoubleVar(double doubleVar) {
this.doubleVar = doubleVar;
}
public String getStringVar() {
return stringVar;
}
public void setStringVar(String stringVar) {
this.stringVar = stringVar;
}
}
public class Class03{
public static void main(String[]args) {
GetSetTest gs=new GetSetTest();
gs.setIntVar(123);
System.out.println("멤버변수 intVar: "+gs.getIntVar());
}
}