프로그래밍/java

[자바JAVA] 클래스(class)_객체 생성, 전역변수, 접근제한자, this.

pupu91 2022. 7. 7. 18:07
반응형

클래스

 

 

  •  서로 다른 자료형의 데이터들을 사용자(개발자) 정의로 하나로 묶어 새로운 타입을 정의 
  • 클래스 내부에 메소드를 작성하지 않고 바로 변수 선언이 가능 - > 전역변수(=필드=인스턴스변수=속성)
  • 객체 생성 방법 : 클래스명 레퍼런스명 =  new 클래스명();
  • 다른 곳에서 클래스의 필드에 접근하기 위해 ' . ' (참조연산자)을 활용
  • 레퍼런스명. 필드명 으로 필드에 접근(배열은 인덱스로 접근, 객체는 필드명으로 접근)

 


 

 

 

(1) Member class에 필드 작성하기

public class Member {
	String id;
	String pwd;
	String name;
	int age;
	char gender;
	String[] hobby;
}
(2) new 연산자로 객체 생성하기

Member member = new Member();
=> 서로 다른 자료형들을 하나의 member라는 이름으로 관리할 수 있는 공간이 생성됨.
   heep에 생성 되기 때문에 jvm 기본 값으로 초기화 됨
(3) 레퍼런스명.필드명 으로  필드에 접근해보기

System.out.println(member.id);
System.out.println(member.pwd);
System.out.println(member.name);
System.out.println(member.age);
System.out.println(member.gender);
System.out.println(member.hobby);

◇ 실행 결과
null
null
null
0

null
(4) 필드에 접근해서 초기화 후 출력해보기

member.id = "abcd"
member.pwd = "pass";
member.name = "홍길동";
member.age = 20;
member.gender = 'M';
member.hobby = new String[] {"축구", "볼링", "테니스"};

System.out.println(member.id);
System.out.println(member.pwd);
System.out.println(member.name);
System.out.println(member.age);
System.out.println(member.gender);
배열은 for문으로 출력
for(int i = 0; i < member.hobby.length; i++) {
	System.out.println(member.hobby[i] + " ");
    
 ◇ 실행 결과   
abcd
pass
홍길동
20
M
축구 
볼링 
테니스

 

 

 


필드에 바로 접근할 때 발생할 수 있는 문제점과 해결방법

 


반응형

 

1. 필드에 올바르지 않은 값이 들어가도 통제가 불가능하다.

    해결방법 :  this. 를 사용하여 전역변수에 접근하기

this.는 인스턴스가 생성되었을 때 자신의 주소를 저장하는 레퍼런스 변수이다.
지역변수와 전역변수의 이름이 동일한 경우 지역변수를 우선적으로 접근하기 때문에
this. 를 명시하여 전역변수에 접근한다.

 

 

 

2 . 필드 값을 변경하면 사용자 코드는 전부 수정해야하기 때문에 유지보수에 악영향을 미친다.

     해결 방법 : 접근 제한자를 사용하여 메소드를 통한 간접 접근을 강제화 한다 = 캡슐화(encapsulation))

캡슐화는 유지보수성 증가를 위해 필드의 직접 접근을 제한하고
 public 메소드를 이용해서 간접적으로 접근하여 사용할 수 있도록 만든 기술로
 클래스 작성시 특별한 목적이 아닌 이상 캡슐화가 기본 원칙으로 사용되고 있다.

 

 

 


접근제한자

public, protected, (default), private

 


 

 

  • 클래스 혹은 클래스의 멤버에 참조 연산자로 접근할 수 있는 범위를 제한하기 위한 키워드
  •  클래스의 멤버(필드, 메소드)에 모두 사용 가능
  •  클래스 선언 시 사용하는 접근 제한자는 public과 default만 가능하다.

 

 

기호 구분 범위
+
public

모든 패키지에 접근 허용
#
protected

동일 패키지에 접근허용. 상속 관계에 있는 경우 다른 패키지에서도 접근 가능
~
(default)

동일 패키지에서만 접근 허용 (작성하지 않는 것이 derault)
-
private

해당 클래스 내부에서만 접근 허용

 

반응형