반응형
클래스
- 서로 다른 자료형의 데이터들을 사용자(개발자) 정의로 하나로 묶어 새로운 타입을 정의
- 클래스 내부에 메소드를 작성하지 않고 바로 변수 선언이 가능 - > 전역변수(=필드=인스턴스변수=속성)
- 객체 생성 방법 : 클래스명 레퍼런스명 = 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 |
해당 클래스 내부에서만 접근 허용 |
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바JAVA] 오버로딩 (Overloading) (0) | 2022.07.07 |
---|---|
[자바JAVA] 객체 지향 언어(OOP) & DTO 작성 방법 (0) | 2022.07.07 |
[자바JAVA] 배열의 정렬(오름차순으로 정렬하기, 중복 값 제거하기) (0) | 2022.07.07 |
[자바JAVA] 다차원 배열 (2차원 배열) & 얇은복사와 깊은복사 (0) | 2022.07.07 |
[자바JAVA] 배열(Array)_ 1차원 배열 (0) | 2022.07.05 |