본문 바로가기

개발/Java

[Java] 자바 - 클래스 / 클래스 구조 - 필드, 생성자, 메소드 / 접근제한자 / 객체지향 프로그래밍

 

< 객체지향 프로그래밍 >

 

- 현실 세계에서 독립적인 존재(객체)들간의 상호작용(행위)을 프로그래밍 언어로 구현하는 것

- 프로그램 상에 객체(변수)를 만들기 위해서는 '클래스'를 먼저 만들어야 함

 


 

< 클래스 >

 

- 각 개체들의 정보를 담아내는 그릇 또는 틀 => VO(Value Object)

 

 

< 클래스의 구조 > 

 

1. 필드부 

- 필드 = 멤버변수 = 클래스변수 = 인스턴스변수

- 데이터를 저장하는 역할(변수)

- 클래스 내부지만 메소드 밖 영역에 정의함

[ 표현법 ] 접근제한자 (예약어) 자료형 필드이름;

 

* 접근제한자(access modifier) : 필드에 접근할 수 있는 범위를 제한할 수 있음

public ( + ) 어디서든 (같은 패키지, 다른 패키지 상관없이) 접근 가능
protected ( # ) 같은 패키지면 무조건 접근 가능. 다른 패키지면, 상속 구조인 클래스에서만 접근 가능
default ( ~ ) 같은 패키지에서만 접근 가능. 생략 가능 (= package friendly)
private ( - ) 오직 해당 클래스 안에서만 접근 가능

(위에서부터 아래로 내려올수록 접근 범위 좁아짐 : public > protected > default > private)

+, #, ~, - : 클래스 다이어그램 표기 방법(기호로 바꿔 표기) - 소통할 때 사용

 

 

2. 생성자부

* 생성자(constructor) : 메소드이름(생성자)이 클래스 이름과 동일하고, 리턴자료형이 없는 메소드(반환형 없음)

[ 표현법 ]

public 클래스이름(매개변수(생략가능)) {

     해당 생성자를 통해서 객체 생성시, 실행하고자 하는 코드

}

cf) [ 메소드 표현법 ]

      접근제한자 반환형 메소드이름(매개변수(생략가능)) {

            실행하려고 하는 코드

      }

 

[ 작성 목적 ]

- 객체를 생성해주기 위한 목적 (유효성있는 객체를 만들기 위해)

- 객체를 생성 뿐만 아니라, 매개변수로 전달된 값들을 바로 필드에 초기화할 목적

// Employee e1 = new Employee(); ◁ 이렇게 기본생성자로 생성하면, 데이터가 없는 사용할 수 없는 객체 생성.

매개변수로 값을 전달하여 필드값을 초기화하면서 생성한다면, 바로 사용 가능한 유효성 있는 객체를 만들 수 있음!

 

[ 종류 ]

- 매개변수가 없는 생성자 => 기본생성자 

- 매개변수가 있는 생성자

(필드에 값을 '초기화' 할 수 있느냐 없느냐의 차이)

 

[ 작성 시 주의사항 ]

- 생성자의 이름은 클래스의 이름과 동일해야 함 (대,소문자 구분)

- 반환형은 존재하지 않음

- 생성자 여러개 생성 가능. 단, 매개변수가 중복되면 안됨 (=> '오버로딩' 개념과 이어짐)

- 매개변수를 받는 생성자를 작성하면 JVM이 기본생성자를 생성해주지 않음 => ★☆기본생성자 작성 필요☆★

 

* 기본생성자 : 매개변수가 없는 생성자

- 단지 객체를 생성할 목적으로 사용 (메모리 공간 할당, 공간 확보)

- 기본생성자 생략해도 오류 발생 X - 생성자를 만들지 않으면 JVM이 기본생성자를 자동 생성 해줌

 

 

3. 메소드부

- 기능을 구현하는 부분

- 한 번 정의해두고, 필요할때마다 호출해서 사용

- '호출할 때의 인자값'이 '매개변수의 자료형', '매개변수 개수'와 일치해야 함

[ 표현법 ] // 예약어, 매개변수, return문 부분(반환형 - void)은 생략 가능

접근제한자 (예약어) 반환형 메소드식별자(매개변수) {

           메소드 호출시 실행할 코드;

           ( return 반환값; )

}

* 접근제한자 : 호출 할 수 있는 범위를 제한

* 반환형 : 메소드의 결과값(반환값)의 자료형 - void : 돌려줄 값이 없는 경우 사용

* 매개변수 : 메소드 호출시, 입력값으로 넣어주는 값을 받아주는 변수

                    해당 메소드 실행중에만 사용이 가능. 생략 가능

 

public class User {
	
	// [ 필드부 ]
	// 회원 아이디, 비밀번호, 이름, 나이, 성별
	private String id;
	private String pw;
	private String name;
	private int age;
	private char gender;
	
	// [ 생성자부 ]
	public User() {} // 기본생성자
	public User(String id, String pw, String name) { // 매개변수가 있는 생성자
		this.id = id;
		this.pw = pw;
		this.name = name;
	}
	// 모든 필드를 매개변수로 받는 생성자
	public User(String id, String pw, String name, int age, char gender) {
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	
	// [ 메소드부 ]
	// setter
	public void setId(String id) {
		this.id = id;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setGender(char gender) {
		this.gender = gender;
	}
	// getter
	public String getId() {
		return id;
	}
	public String getPw() {
		return pw;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public char getGender() {
		return gender;
	}
	// information
	public String information() {
		return "이름 : " + name + "\n나이 : " + age + "\n성별 : " + gender
				+ "\nID : " + id + "\nPW : " + pw;
	}

}