객체
- 클래스라는 것을 생성하면 바로 객체를 만드는 것이 아닌! 주소값을 지정한다.
Car myCar = new Car();
주소값을지정 실제 필드, 메소드를 가짐.
1. 필드
- 클래스의 성질 및 특성을 나타낸다. 이때 접근 제한자로 필드에 직접접근을 막을 수 있는데 총 4가지의 종류가 있다.
1.private - class안에서만 접근 가능
2.default - 같은 패키지 않에서만 접근 가능
3.protected - 같은 패키지 않에서만 접근가능, 예외로 상속받거나 상속하는 경우 상속 클래스에서 사용가능
4.public - 같은 프로젝트 안이라면 언제든지 사용가능
- 필드의 선언은 private으로 선언하며(보안성) 변수의 특징에 맞게 datatype을 선언한다.
2. 메소드
- 클래스의 동작을 나타내는 요소.
- 생성자, 반환값이 없는 메소드, 반환값이 있는 메소드등 다양한 메소드를 갖고있다.
- 메소드를 만들 때 클래스 안에 있는 필드를 그대로 가져오고 싶을 땐 this.를 사용한다.
- 이는 python의 self 와 포지션이 비슷하다고 생각하면 편하다.
3. 생성자
- class이름과 동일하다.
- return type이 존재하지 않는다.
- 객체를 생성할 때만 호출이 된다.
- 단 1번만 생성된다. 만일 다시 호출한다면 새로운 객체가 생성된다.
- 앞서 말했듯 class의 field값에 바로 접근한다면 보안성과 개발자가 의도한바와 바르게 작동할 수 있으므로 메서드를 이용해 접근 하도록 한다.
기본 생성자
- 이때 생성자와 관한 메서드는 getter setter method가 있다.
- getter setter method는 필드값에 쉽게 접근할 수 있는 메서드들을 단박에 만들어준다. 만드는 법은 alt+shift+s로
- 쉽게 한방에 여러 필드값에 해당하는 getter setter method를 만들 수 있다.
- 생성자는 객체를 생성하는 녀석이다.
- 생성자를 따로 정의하지 않으면 기본 생성자가 사용된다.
- 기본 생성자는 IDE인 이클립스에서 기본적으로 제공한다.
예를 들어 자동차 class의 기본 생성자.
Car(){}
public class Main{
public static void main(String[] args){
Car myCar = new Car();
}
}
- 생성자를 생성 후 data를 setter method를 이용하여 집어 넣어준다.
사용자 정의 생성자
- VO(value object) 또는 DTO(data transfer object)라고 부른다.
public Student(String name, int stuId, char gen, String phone, String grade) {
super();
this.name = name;
this.stuId = stuId;
this.gen = gen;
this.phone = phone;
this.grade = grade;
}
@Override
public String toString() {
return "Student [name=" + name + ", stuId=" + stuId + ", gen=" + gen + ", phone=" + phone + ", grade=" + grade
+ "]";
}
- overide 말 그대로 덮어쓰기이며 원래 toString은 주소갚을 나타내 주는 함수이지만 필드값을 전부 보여줄 수 있도록 덮씌운 것이다.
- toString 함수 또한 alt+shift+s에서 찾아볼 수 있다.
4. 가변배열
- ArrayList : 동일한 datatype을 순차적으로 나열하며 저장 단, size의 가변성이 있다.
ArrayList<datatype> 변수명 = new ArrayList<datatype>();
- 위의 보라색 부분의 datatype은 말 그래도 reference의 datatype 즉, 객체가 들어갈 수 있다.
data 추가
- add 함수로 추가할 수 있다 다만, 그냥 add함수만 쓰면 python의 append 함수와 같다. 제일 마지막에 추가하게 된다.
- 중간에 값을 삽입하고 싶다면 add(index, value)를 넣어주면 중간에 값이 있더라고 그 값이 update 되는 것이 아닌 한칸씩 뒤로 밀고 그 자리에 값이 비집고 들어간다.
data 삭제
- remove함수를 쓰고 removeAll을 쓰게 되면 ArrayList가 초기화가 된다.
가변 배열과 일반 배열의 차이점
- length 대신 size를 쓴다.
- 가변리스트명.get(인덱스) 를 사용하여 data를 뽑는다.
- 이때 전부 호출하고 싶다면 for문을 쓰면 된다.
for(int i= 0; i<students.size();i++) {
System.out.println(students.get(i));
}
- 또는 Arrays 부분에 가변배열 이름을 써도 가능하다
System.out.println(students.toString());
5. 실습(생성자+가변배열)