데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위
클래스 : 객체를 찍어내는 설계도, 설계도의 역할만 하고 실행은 안함
-> 실행은 main 메서드에서 진행
package day04;
public class Dancer {
// 클래스에서는 객체의 속성과 기능을 정의
// 객체의 속성: 객체를 표현하는 데이터
// --> 필드 (field) , js에서의 프로퍼티
// 함수 안에 있는 것은 변수라고 부름, 객체 X
String dancerName; // 댄서 이름
String crewName; // 팀 이름
String genre; // 장르
int danceLevel; // 0: 초보, 1: 아마추어, 2: 프로
// 객체의 기능: 객체가 할 수 있는 일, 행위
// --> 메서드 (method), static을 붙이지 않기
// 자기소개 기능 (함수 X, introduce()는 메서드)
void introduce() {
System.out.println("이름: " + dancerName);
System.out.println("팀명: " + crewName);
System.out.println("장르: " + genre);
System.out.println("레벨: " + danceLevel);
}
// 춤추는 기능
void dance() {
System.out.printf("%s 댄서가 %s춤을 춥니다.\n", dancerName, genre);
}
// 생성자 (constructor)
// 객체가 생성될 때 초기 값을 세팅해주는 함수의 일종
// 1. 생성자는 함수의 일종인데 반드시 이름이 클래스이름과 같아야 한다.
// 2. 생성자는 리턴값이 없음, 따라서 void가 생략됨
Dancer() {
dancerName = "춤꾼";
crewName = "팝핀크루";
genre = "케이팝";
danceLevel = 0;
}
// 생성자는 여러개 만들 수 있음: 생성자 오버로딩
// 규칙: 파라미터가 달라야 함
Dancer(String dName) {
dancerName = dName;
crewName = "도시의춤꾼들";
genre = "어반";
danceLevel = 1;
}
Dancer(String dName, String cName) {
dancerName = dName;
crewName = cName;
genre = "어반";
danceLevel = 1;
}
Dancer(String dName, String cName, String gr) {
dancerName = dName;
crewName = cName;
genre = gr;
danceLevel = 1;
}
}
실행용 클래스, 객체를 생성해서 객체의 기능을 실행시키는 곳
Dancer kim = new Dancer();
package day04;
public class DancerMain {
public static void main(String[] args) {
// 설계도(클래스)를 통해 객체를 찍어냄(생성)
Dancer kim = new Dancer();
// 객체의 속성 부여
kim.dancerName = "김뽀또";
kim.crewName = "치즈치즈";
kim.genre = "스트릿";
kim.danceLevel = 1;
kim.introduce();
kim.dance();
System.out.println("==================================");
// 두번째 댄서
Dancer park = new Dancer();
park.dancerName = "박격포";
park.crewName = "전쟁이야";
park.genre = "케이팝";
park.danceLevel = 2;
park.introduce();
park.dance();
System.out.println("==================================");
Dancer hong = new Dancer();
hong.dance();
System.out.println("==================================");
Dancer choi = new Dancer("최폭풍");
choi.dance();
choi.introduce();
System.out.println("==================================");
Dancer nanana = new Dancer("냐냐냥", "시골크루");
nanana.dance();
nanana.introduce();
System.out.println("==================================");
Dancer rock = new Dancer("메롱롱", "폭식맨", "락킹");
rock.introduce();
}
}
객체가 생성될 때 초기 값을 세팅해주는 함수의 일종
(정수: 0, 실수: 0.0, 논리: false, 문자(char): ' ', 나머지: null)
package day04;
public class FieldAndLocal {
// aaa : 필드
int aaa;
// ccc: 매개 변수(parameter) - 메서드 호출시 반드시 필요한 인자값
void foo(int ccc) {
int bbb = 20; // bbb : 지역변수
System.out.println("aaa = " + aaa);
System.out.println("bbb = " + bbb);
System.out.println("ccc = " + ccc);
}
}
package day04;
public class FieldMain {
public static void main(String[] args) {
FieldAndLocal fl = new FieldAndLocal();
fl.foo(100);
}
}
==
과 equals()
가 존재String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2); // true
String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // false
new String();
처럼 문자열을 생성하게 되면 상수 풀에 존재하는 것을 재활용 하는 것이 아닌 새로운 문자열 객체를 생성. 주소값은 다르다고 나올 것이다.String s1 = "hello";
String s2 = "hello";
System.out.println(s1.equals(s2)); // true
String s3 = new String("hello");
System.out.println(s1.equals(s3)); //true
equals()
쓰자!==
을 사용해서 비교할 일이 많지 않다는 것!!!