객체가 중심이 되는 프로그래밍 기법
객체란?
프로그래밍에서의 객체
->프로그램에서 표현하고자 하는 기능을 묶기위한 단위
클래스
객체의 설계도 역할을 하는 프로그램 소스
-공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러개 생성할 수 있다.
-동일한 설계로 만들어진 자동차라 하더라도 각각의 자동차를 구성하는 부품들은 그 형태만 같을뿐, 실제로는 각각 존재하게 된다.
-클래스를 작성하면서 그 안에 생성되는 멤버변수들은 여러 개의 객체간에 서로 동일한 이름으로 존재하지만 실제로는 서로 다른 값이라는 의미
객체의 생성 및 할당 방법
객체를 선언
클래스 이름 객체이름;
-객체의 할당
객체이름 = new 클래스 이름();
-선언과 할당의 통합
클래스 이름 객체이름 = new 클래스 이름();
객체의 사용
-객체 안에 포함된 변수가 메서드는 점(.)으로 연결하여 접근한다.
->객체이름.멤버변수 = 값;
->객체이름.메서드이름();
->객체이름.메서드이름(값1,값2,..);
클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우
-객체를 생성함과 동시에 객체안에 name변수와 age변수가 할당된 값을 포함하게 된다.
-같은 클래스로 객체를 여러개 생성할 경우, 모든 객체가 동일한 값을 갖게 된다.
-멤버변수의 값을 지정하기 전까지의 사용될 "기본값"으로서의 의미이다.
-일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않는다.
class User{
String name;
public void setName(String name){
this.name = name;
}
}
User u = new User();
u.setName("자바학생");
system.out.println(u.name);//자바학생 출력됨
모든 멤버변수 앞에는 this키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이 소스코드의 가독성을 위해 바람직하다.
생성자란?
Member member = new Member();
-ew 키워드를 사용하여 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드
리턴형을 명시하지 않으며, 메서드의 이름은 클래스와 동일하다.
class Member{ Member(){ //이 안은 객체가 생성될 때 자동으로 호출된다. } ...
}
자동으로 실행된다는 특성 때문에 객체가 생성되면서 해당객체의 특성을 초기화하기 위해 사용
(ex. 멤버변수의 초기값을 할당하는 용도)//암기
기본 생성자
파라미터가 없는 생성자
클래스에 특별히 생성자가 정의되지 않은 경우 java컴파일러는 다음과 같은 기본 생성자가 존재한다고 인식한다.
class User{
user(){
//생성자가 있지만, 내용이 비어있다.
}
}
파라미터를 갖는 생성자.
생성자도 메서드의 한 종류이므로, 파라미터를 함께 정의하는 것이 가능하다.
생성자의 파라미터를 멤버변수에 복사하는 것으로, 객체의 초기화를 외부적인 요인에 의해 처리할 수 있다.
class Student{
String name;
int age;
Student( String name, int age){
//생성자 파라미터의 값을 멤버변수에 복사
this.name = name;
this.age = age;
}
}
Student std = new Student();//이건 에러난다.
//생성자의 파라미터가 정의된 경우 객체 생성 구문에서 해당 파라미터를 전달해야 한다.
Student std = new Student("자바학생",20);
private, ->클래스 안에서만 사용가능, 객체를 통해 접근 불가, 일반적으로 모든 멤버변수 앞에 명시
protected ->현재 클래스 내의 다른 자원이나. 같은 패키지 안에 존재하는 클래스와 하위 클래스에서 접근 가능하다. 잘 사용하지 않는다.
default ->접근 한정자를 명시하지 않은경우, 현재 클래스 내의 다른 자원이나 동일 패키지 내의 다른 클래스에서 접근 가능하다.
이렇듯 System.out.println(user.weight);는 private이므로 접근이 불가하다는 것을 확인할 수 있다.
사용예시.