이전 내용
클래스 class
예를 들어 java의 아래와 같은 코드가 있고,
package java_ex08;
public class Ex_01 {
// 멤버변수 생성
String name;
int age;
String addr;
// 생성자
public Ex_01(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
// 멤버 메서드 생성 (메서드: 함수)
public void show() {
System.out.println("이름:"+this.name);
System.out.println("나이:"+this.age);
System.out.println("주소:"+this.addr);
}
public static void main(String[] args) {
// 인스턴스 생성
Ex_01 ex = new Ex_01("홍길동", 30, "인천");
ex.show();
System.out.println();
Ex_01 ex1 = new Ex_01("유재석", 53, "서울");
ex1.show();
}
}
해당 코드를 실행하면 아래와 같은 결과가 나온다.
이러한 코드의 개념 및 구조를 시각화하면 아래와 같다.
[클래스]
- 클래스는 프로그램에서 사용될 객체의 틀을 정의하며, 객체를 생성하기 위한 설계도 역할을 한다.
- 클래스는 여러 가지 멤버 변수와 메서드를 포함하며, 이들을 적절히 구성하여 객체의 동작을 정의한다.
- 클래스는 항상 패키지(package) 안에 만들어져야 한다.
- 클래스의 이름과 인스턴스 이름을 동일하게 할 수는 있으나, 후에 혼동을 줄 수 있으므로 클래스의 이름 첫글자는 대문자, 인스턴스의 이름은 소문자로 짓는 것이 좋다.
- 클래스에는 메인 함수가 포함될 수도 있고, 포함되지 않을 수도 있다. 그러나, 메인 함수와 분리하여 만드는 것이 좋다.
★ 클래스의 구성 요소
- 멤버변수(인스턴스 변수): 클래스 내에서 사용되는 변수이며, 클래스의 속성을 나타낸다.
- 메서드(인스턴스 메서드): 클래스 내에서 사용되는 함수이며, 클래스의 동작을 나타낸다.
- 생성자: 클래스로부터 객체를 생성할 때 호출되는 특별한 메서드이며, 객체의 초기화를 수행한다.
[코드 설명]
- public class Ex_01: 클래스. public 은 접근가능자이며, 외부에서 접근 가능하다는 의미이다.
- 멤버변수: 클래스 내에 선언된 변수이며, 외부에서 접근 가능한 변수. 멤버변수는 필요한 만큼 생성할 수 있다. 이 경우 name, age, addr라는 세 가지 멤버 변수가 선언되어 있다. 멤버 변수는 인스턴스 변수로, 각 객체마다 개별적인 값을 가질 수 있다.
- public Ex_01: 생성자. 생성자는 클래스의 인스턴스 (멤버변수)를 초기화하는 기능으로, 클래스명과 메서드명이 같다. 이 경우 Ex_01 클래스의 생성자는 String name, int age, String addr라는 세 가지 매개변수를 받는다. 생성자 내부에서 this 키워드를 사용하여 멤버 변수에 초기값을 할당한다.
- public void show(): show()라는 메서드를 선언한다. void는 리턴 값이 없음을 의미하고, 이 메서드는 매개변수가 없다. 또한 이 메서드는 public 접근 제어자로, 어디서나 호출할 수 있다. 메서드는 System.out.println를 사용하여 콘솔에 멤버 변수의 값을 출력한다. this 키워드를 사용하여 현재 객체의 멤버 변수에 접근한다.
- public static void main(String[] args): ain()이라는 메인 메서드를 선언한다. 메인 메서드는 프로그램의 시작점이다.
- Ex_01 ex = new Ex_01("홍길동", 30, "인천");: Ex_01 클래스의 인스턴스를 생성하여 ex라는 변수에 할당한다. 데이터의 개수는 매개변수 개수와 동일해야 한다.
- ex.show(); : x.show()를 호출하여 각 인스턴스의 멤버 변수의 값을 출력한다.
[메서드]
- 메서드는 클래스 내에 구현된 함수를 말한다.
- 메서드(함수)의 특징 중 하나는 반드시 호출해야 실행된다는 점이다.
인스턴스 instance
클래스에 의해서 만들어진 객체이며,
클래스에서 생성된 각각의 인스턴스는 고유한 상태와 행동을 가지며 객체의 특징을 표현한다.
[클래스, 객체, 인스턴스의 차이점]
- 클래스: 객체를 만들기 위한 설계도 또는 틀. 객체를 생성하기 위한 속성과 메서드 정의.
- 객체: 속성과 동작을 가지는 실체. 객체는 클래스의 인스턴스이며, 자신만의 상태와 행동을 가짐.
- 인스턴스: 클래스를 기반으로 생성된 객체. 클래스에서 생성된 각각의 인스턴스는 고유한 상태와 행동을 가지며, 객체의 특징 표현.
예시1
아래와 같은 형식으로 클래스, 생성자, 인스턴스, 메서드를 작성할 수도 있다.
public class Person {
// 멤버변수
String name;
int age;
String hp;
String gender;
// 생성자 (클래스명과 동일)
// public: 외부에서 접근 가능
public Person(String name, int age, String hp, String gender) {
this.name = name;
this.age = age;
this.hp = hp;
this.gender = gender;
}
// 멤버메서드
public String showInfo() {
return name + "님의 나이는 " + age + "세이고, 성별은 " + gender + "입니다.";
}
// 메인 함수
public static void main(String[] args) {
// Person 클래스를 사용하여 여러 개의 인스턴스 생성
Person hong = new Person("홍길동", 35, "010-1234-5678", "남자");
Person kim = new Person("김철수", 28, "010-0987-4321", "남자");
Person lee = new Person("이영희", 15, "010-9999-5678", "여자");
// 콘솔에 출력
System.out.println(hong.showInfo());
System.out.println(kim.showInfo());
System.out.println(lee.showInfo());
}
▶ 멤버변수는 4개이나, 위와 같이 메서드에서 3개만 설정할 수도 있다. (단, 메인 함수에서는 메서드에서 설정한 개수만큼 데이터를 입력해줘야 한다.)
만약, 메서드 부분만 아래와 같이 수정하여 실행하면
public String showInfo() {
return name + "님의 나이는 " + age + "세이고, 성별은 " + gender + "입니다."
+ "\n전화번호는 " + hp + "입니다.\n";
}
- 멤버메서드에서 return 값이 없을 경우, void가 붙는다.
- return 값의 자료형에 따라 맞는 자료형을 적어주면 되며, 이 경우에는 문자열이므로 String이 붙는다.
예시2
실무에서는 클래스를 분리해서 만드는 경우가 많다.
- 프로젝트명: score
- 클래스(2개): Sungjuk.java / Main.java - main() 포함
▶ score 라는 패키지 안에 클래스를 두 가지로 넣어서 코드를 작성해 본다.
1. Sungjuk 클래스 생성
package score;
public class Sungjuk {
// 멤버변수
String name;
// 클래스 작업 시에는 초기화를 하지 않아도 된다.
int kor;
int eng;
int mat;
// 생성자(멤버변수 초기화)
// 멤버변수와 매개변수는 이름이 같지 않아도 된다.
public Sungjuk(String nm, int kr, int en, int mt) {
this.name = nm;
this.kor = kr;
this.eng = en;
this.mat = mt;
}
// 멤버메서드(3개의 과목에 대한 총점, 평균, 결과를 계산하여 출력하는 기능)
public void show() {
// show 메서드 안에서만 사용 가능한 지역변수
int tot = kor + eng + mat;
double avg = tot / 3.0; // 배열이 아니므로 length 사용 불가
String avg1 = String.format("%.1f", avg);
String res = "";
// 만약 평균이 60점 이상이면 "통과", 아니면 "탈락" 출력
if (avg>=60) {
res="통과";
} else {
res = "탈락";
}
System.out.println(name + " 학생의 국어점수는 " + kor + "점,"
+ "영어점수는 " + eng + "점," + "수학점수는 " + mat + "점으로,"
+ "\n총점은 " + tot + "점," + "평균은 " + avg1 + "점입니다"
+ "따라서 이번 시험은" + res + "입니다.");
}
}
해당 코드를 실행하면 콘솔에 아무 값도 뜨지 않는데, 그 이유는 값을 출력할 main 함수가 없기 때문이다.
2. Main 클래스에 main 함수 생성
package score;
public class Main {
public static void main(String[] args) {
// Sungjuk 클래스 사용
Sungjuk jang = new Sungjuk("장동민", 56, 40, 80);
Sungjuk lee = new Sungjuk("이미주", 82, 54, 75);
Sungjuk song = new Sungjuk("송혜교", 92, 80, 72);
// 출력
jang.show();
lee.show();
song.show();
}
}
위 코드를 실행하면
★ 코드 보완 (배열 넣기)
double avg = tot / 3.0;
부분은 배열이 아니므로 length가 사용 불가한데, 이러한 경우 변수가 늘어나면 그때그때 숫자를 변경해줘야 하므로, 추후 편리함을 위해 length 를 넣고자 한다. 이러한 경우에는 두 클래스를 모두 수정해 줘야 한다.
1. Sungjuk 클래스 수정
package score;
public class Sungjuk {
// 멤버변수 (클래스 작업 시에는 초기화를 하지 않아도 된다.)
String name;
// 상단의 변수를 배열로 만들기 위한 작업
int [] num = new int[3];
// 생성자(멤버변수 초기화)
// 멤버변수와 매개변수는 이름이 같지 않아도 된다.
public Sungjuk(String nm, int[] num) {
this.name = nm;
this.num = num;
}
// 멤버메서드(3개의 과목에 대한 총점, 평균, 결과를 계산하여 출력하는 기능)
public void show() {
// show 메서드 안에서만 사용 가능한 지역변수
// 배열을 순회해야 하므로 for 반복문 넣어줌.
int tot = 0;
for (int i=0; i<num.length; i++) {
tot += num[i];
}
double avg = (double)tot / num.length;
String avg1 = String.format("%.1f", avg);
String res = "";
// 만약 평균이 60점 이상이면 "통과", 아니면 "탈락" 출력
if (avg>=60) {
res="통과";
} else {
res = "탈락";
}
// 출력 부분에 배열명[인덱스] 넣어줌.
System.out.println(name + " 학생의 국어점수는 " + num[0] + "점,"
+ "영어점수는 " + num[1] + "점," + "수학점수는 " + num[2] + "점으로,"
+ "\n총점은 " + tot + "점," + "평균은 " + avg1 + "점입니다"
+ " 따라서 이번 시험은" + res + "입니다.\n");
}
}
2. Main 클래스 수정
package score;
public class Main {
public static void main(String[] args) {
// Sungjuk 클래스 사용
// 배열 생성
int [] arr1 = {56, 40, 80};
int [] arr2 = {82, 54, 75};
int [] arr3 = {92, 80, 72};
// 데이터 대입
Sungjuk jang = new Sungjuk("장동민", arr1);
Sungjuk lee = new Sungjuk("이미주", arr2);
Sungjuk song = new Sungjuk("송혜교", arr3);
// 출력
jang.show();
lee.show();
song.show();
}
}
상단에 배열을 생성하여 값을 입력하고, 후에 데이터 대입 시에 배열을 넣어주면 된다.
위 코드를 실행하면
다음 내용
[출처]
점프 투 자바
https://mundol-colynn.tistory.com/132
'프로그래밍 및 기타 > Java' 카테고리의 다른 글
[Java] 25년 1월 9일 자바 기초 - 배열 (0) | 2025.01.07 |
---|---|
[Java] 25년 1월 8일 자바 기초 - 문자열 (0) | 2025.01.07 |
[Java] 25년 1월 7일 - 자바 기초(조건문, scanner) (0) | 2025.01.07 |
[Java] 25년 1월 3일 - 자바 기초 (반복문) (0) | 2025.01.03 |
[Java] 25년 1월 2일 - 자바 기초 (변수, 연산자) (1) | 2025.01.02 |