Main은 public static void main(String[] args) { } 있지만, class에서는 main을 안쓴다. 잘 사용하진 않지만 하나로 합친다면 public은 메인에 하나만 사용하고, 메인 이름이 파일명이 된다. 여러 개로 나누어서 사용하는 게 기본이다.
-클래스의 구조-
변수 선언 (멤버변수-모든 지역에서 사용 가능하다)
메소드 (인쇄 행위 , 계산 행위)
메소드 안에서도 변수 선언을 할 수 있음 (로컬-지역 변수는 여기서만 사용할 수 있다.)
main에서는 가져다 씀 - 모든 루틴을 메인에서 사용함
클래스에서 설정을 해줘도 메인에서 인쇄를 해야 볼 수 있다.
그냥 사용하는 것이 아니라 반드시 객체 생성(new)을 해줘야 한다.
--------------
멤버 변수 - 초기화 하지 않아도 자동 초기화 됨
로컬 변수 - 수동으로 초기화를 꼭 해줘야함
--------------
메소드
반환할 데이터 타입을 쓴다. int add(10, 10)
반환하지 않는 경우 void를 붙임 void onPower();
--------------
인자와 파라미터는 데이터타입과 개수가 같아야한다.
--------------
package AirCon;
public class VariableArgument {
void printInfo(String ...infos) {
if(infos.length != 0) {
for(int i=0; i<infos.length; i++) {
System.out.println(infos[i]);
}
}else{
System.out.println("인자가 없네요");
}
System.out.println("-------------------------");
}
/*void printInfo(){
System.out.println("인자가 없어요");
}
void printInfo(String name){ //파라미터 데이터 타입 같아야 됨
System.out.println(name);
}
void printInfo(String name, String m1){ //파라미터 개수가 같아야 됨
System.out.println(name + " " + m1);
}
void printInfo(String name, String m1, String m2){
System.out.println(name + " " + m1 + " " + m2);
}
//같은 이름을 이용해서 인자값이 맞는 걸 연결해줌 : 오버라이딩
//실전에서는 이렇게 더 많이 사용한다.
*/
public static void main(String[] args) {
VariableArgument vt = new VariableArgument();
System.out.println("인자가 없을 때 : ");
vt.printInfo();
System.out.println("인자가 한 개일 때 : ");
vt.printInfo("오정원"); //인자
System.out.println("인자가 두 개일 때 : ");
vt.printInfo("오정원", "전산부");
System.out.println("인자가 세 개일 때 : ");
vt.printInfo("오정원", "전산부", "1억");
}
}
(두 가지 버전)
class Person{
int age;
String name;
int height;
int width;
// public Person(){
// }
// public Person(int age) {
// this.age = age;
// }
// public Person(String name) {
// this.name = name;
// }
}
public class ConstructorTest {
public static void main(String[] args) {
Person person1 = new Person();
System.out.println(
"person1.name = "+ person1.name +
", person1.height = " + person1.height +
", person1.width = " + person1.width +
", person1.age = " + person1.age);
// Person person2 = new Person(30);
// System.out.println(
// "person2.name = "+ person2.name +
// ", person2.height = " + person2.height +
// ", person2.width = " + person2.width +
// ", person2.age = " + person2.age);
person1.age = 30;
System.out.println(
"person1.name = "+ person1.name +
", person1.height = " + person1.height +
", person1.width = " + person1.width +
", person1.age = " + person1.age);
// Person person3 = new Person("goodman");
// System.out.println(
// "person3.name = "+ person3.name +
// ", person3.height = " + person3.height +
// ", person3.width = " + person3.width +
// ", person3.age = " + person3.age);
person1.name = "goodmen";
System.out.println(
"person1.name = "+ person1.name +
", person1.height = " + person1.height +
", person1.width = " + person1.width +
", person1.age = " + person1.age);
}
}
//이렇게 바꿔도 결과는 똑같다.
클래스가 한 파일 안에 여러 개 있을 때 public class이 붙으면 파일 제목이 된다.
Person person1 = new Person();
=> 메인에서 Person 클래스를 사용하고 싶어서 (변수가 4개 메소드가 3개) 객체를 생성했다.
인쇄된 내용을 보면...
person1.name = null, person1.height = 0, person1.width = 0, person1.age = 0
==> 아무것도 없으면 초기화 값이 출력됨
person2.name = null, person2.height = 0, person2.width = 0, person2.age = 30
==> 30이라는 값을 주면 int 값을 받은
public Person(int age) { this.age = age; } 메소드에 매칭이 된다.
this.age이것은 다른 값이다.
person3.name = goodman, person3.height = 0, person3.width = 0, person3.age = 0
==>goodman을 주면 name에 매칭이 된다.
부모 클래스
package Generate;
public class Person {
private String name; //아무도 못 가져가게 private 붙임
private int age;
private int height;
private int weight;
//get 접근, set 삽입
//이게 있어야 꺼내쓸 수 있음
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
//초기화 작업
public Person(String name, int age, int height, int weight) {
super();
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
}
쉽게 get, set 메소드 생성하는 방법
alt + Shift +S / Generate Getters and Setters / 모두 체크 및 확인
쉽게 초기화 작업하는 방법
alt + Shift +S / Generate Constructor using Fields / 모두 체크 및 확인
자식클래스(Student)
package Generate;
public class Student extends Person{ //extends Person 퍼슨에게 상속 받다.
private String studentID;
private int grade;
private double GPA; //학점
//get, set
public String getStudentID() {
return studentID;
}
public void setStudentID(String studentID) {
this.studentID = studentID;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public double getGPA() {
return GPA;
}
public void setGPA(double gPA) {
GPA = gPA;
}
public Student(String name, int age, int height, int weight, String studentID, int grade, double gPA) {
super(name, age, height, weight); //person에서 4개 상속 받음
this.studentID = studentID;
this.grade = grade;
GPA = gPA;
}
//위에서 상속 받은 걸 아래처럼 사용한다.
//만들어만 놓고 부르지 않음
//활용하려면 Main 만들어야한다.
public void show() {
System.out.println("----------------------");
System.out.println("학생 이름 : " + getName());
System.out.println("학생 나이 : " + getAge());
System.out.println("학생 키 : " + getHeight());
System.out.println("학생 몸무게 : " + getWeight());
System.out.println("학번 : " + getStudentID());
System.out.println("학년 : " + getGrade());
System.out.println("학점 : "+ getGPA());
}
}
자식 클래스(Teacher)
package Generate;
public class Teacher extends Person {
private String teacherID;
private int monthSalary;
private int workedYear;
//캡슐화 된 것을 아무도 볼 수 없으면 소용이 없으니 바깥에서 사용할 수 있는 통로를 만든다.
//get, set
public String getTeacherID() {
return teacherID;
}
public void setTeacherID(String teacherID) {
this.teacherID = teacherID;
}
public int getMonthSalary() {
return monthSalary;
}
public void setMonthSalary(int monthSalary) {
this.monthSalary = monthSalary;
}
public int getWorkedYear() {
return workedYear;
}
public void setWorkedYear(int workedYear) {
this.workedYear = workedYear;
}
//초기화
public Teacher(String name, int age, int height, int weight, String teacherID, int monthSalary, int workedYear) {
super(name, age, height, weight); //person에서 상속을 받아 갖고 옴
this.teacherID = teacherID;
this.monthSalary = monthSalary;
this.workedYear = workedYear;
}
//초기화 했으니 인쇄도 해야 됨
public void show() {
System.out.println("----------------------");
System.out.println("교사 이름 : " + getName());
System.out.println("교사 나이 : " + getAge());
System.out.println("교사 키 : " + getHeight());
System.out.println("교사 몸무게 : " + getWeight());
System.out.println("교직원번호 : " + getTeacherID());
System.out.println("교사 월급 : " + getMonthSalary());
System.out.println("교사 년차 : " + getWorkedYear());
}
}
Main
package Generate;
public class Main {
public static void main(String[] args) {
Student student1 = new Student("홍길동", 20, 175, 70, "20170101", 1, 4.5);
Student student2 = new Student("이순신", 30, 170, 80, "20170105", 4, 3.0);
student1.show();
student2.show();
//student 클래스 안 show 메소드 출력
}
}
출력
---------------------- 학생 이름 : 홍길동 학생 나이 : 20 학생 키 : 175 학생 몸무게 : 70 학번 : 20170101 학년 : 1 학점 : 4.5 ---------------------- 학생 이름 : 이순신 학생 나이 : 30 학생 키 : 170 학생 몸무게 : 80 학번 : 20170105 학년 : 4 학점 : 3.0 ---------------------- 교사 이름 : Tome sone 교사 나이 : 25 교사 키 : 180 교사 몸무게 : 120 교직원번호 : ABC201 교사 월급 : 3600000 교사 년차 : 5 ---------------------- 교사 이름 : How sone 교사 나이 : 25 교사 키 : 180 교사 몸무게 : 120 교직원번호 : ABC201 교사 월급 : 4000000 교사 년차 : 7 |
package Generate;
public class MAIN2 {
public static void main(String[] args) {
Student[] students = new Student[100];
for(int i=0; i<100; i++) {
students[i] = new Student("홍길동", 20, 175, 70, i+"", 1, 4.5);
//앞students : 여기서 만든 클래스 객체 이름, 뒤Student: 클래스 이름
students[i].show();
}
}
}
보통은 이렇게 사용하진 않지만 해봄
입력 받아서 출력하고 싶을 땐?
package Generate;
import java.util.Scanner;
public class MAIN2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("몇 명을 입력 하실 건가요?");
int num = sc.nextInt();
Student[] students = new Student[num]; //여러명이라서 테이블로 선언
System.out.println("순서대로 이름/나이/키/몸무게/학번/학년/학점 입력 : ");
for(int i=0; i<num; i++) {
String name1; int age1; int height1; int weight1;
String studentID1; int grade1; double gPa11;
System.out.print("학생이름은?");
name1 = sc.next();
System.out.print("학생나이는?");
age1 = sc.nextInt();
System.out.print("학생 키는?");
height1 = sc.nextInt();
System.out.print("학생 몸무게는?");
weight1 = sc.nextInt();
System.out.print("학생 학번은?");
studentID1 = sc.next();
System.out.print("학생 학년은?");
grade1 = sc.nextInt();
System.out.print("학생 학점은?");
gPa11 = sc.nextDouble();
students[i] = new Student(name1, age1, height1, weight1, studentID1, grade1, gPa11);
}
for(int i=0; i<num; i++) {
students[i].show();
}
}
}
'개발일지 > Java + Spring' 카테고리의 다른 글
[Java] 메소드 정의와 다양한 종류 - 매개변수(parameter), 인자(Argument) (0) | 2021.09.27 |
---|---|
[Java] 클래스 정의와 변수의 3가지 종류 (0) | 2021.09.27 |
[Java] 팩토리얼 + 피보나치 수열로 재귀함수 배우기 (0) | 2021.09.22 |
JVM이란? JVM의 구성요소 (0) | 2021.09.20 |
[Java] 함수 설명 + 만드는 방법 (1) | 2021.09.17 |