[Java] 클래스
카테고리: Java
태그: coding Programming Java
클래스
변수를 이용한 회원데이터 관리
Application
package section04.sort;
import java.lang.reflect.Member;
public class Application1 {
public static void main(String[] args) {
String id = "user01";
String pwd = "pass01";
String name = "홍길동";
int age = 20;
shar gender = '남';
String[] hobby = new String[]{"축구", "야구", "배구"};
System.out.println("id = " + id);
System.out.println("pwd = " + pwd);
System.out.println("name = " + name);
System.out.println("age = " + age);
System.out.println("gender = " + gender);
System.out.println("hobby = ");
for (int i = 0; i < hobby.length; i++) {
System.out.println(hobby[i] + " ");
}
System.out.println();
Member member = new Member();
System.out.println("member.id = " + member.id);
System.out.println("member.pwd = " + member.pwd);
System.out.println("member.neme = " + member.name);
System.out.println("member.age = " + member.age);
System.out.println("member.gender = " + member.gender);
System.out.println("member.hobby = " + member.hobby);
member.id = "user02";
member.pwd = "pass02";
member.name = "유관순";
member.age = 21;
member.gender = '여';
member.hobby = new String[]{"게임", "뜨개질", "십자수"};
System.out.println("변경 후 member.id = " + member.id);
System.out.println("변경 후 member.pwd = " + member.pwd);
System.out.println("변경 후 member.name = " + member.name);
System.out.println("변경 후 member.age = " + member.age);
System.out.println("변경 후 member.gender = " + member.gender);
System.out.print("변경 후 member.hobby = ");
for (int i = 0; i < member.hobby.length; i++) {
System.out.print(member.hobby[i] + " ");
}
System.out.println();
}
}
Member
package section01.user_type;
public class Member {
String id;
String pwd;
String name;
int age;
char gender;
String[] hobby;
}
이렇게 하면 단점이 있다
- 변수명을 다 관리해야하는 어려움이 있다
- 모든 회원 정보를 인자로 메소드 호출 시 값을 전달해야하면 너무 많은 값들을 인자로 전달해야해서 한눈에 안들어온다
- 리턴은 1개의 값만 가능하기 때문에 회원정보를 묶어서 리턴값으로 사용할 수 없다(서로 다른 자료형이기 때문)
사용자 정의의 자료형 사용하기
- 변수 선언 및 객체 생성
- 자료형 변수명 = new 클래스명(); <– 지금까지 사용한 구문은 객체(인스턴스)를 생성하는 구문이다
- 사용자 정의 자료형인 클래스를 이용하기 위해서는 new 연산자로 heap 에 할당해야 한다
- 객체를 생성하게 되면 클래스에 정의한 필드와 메소드 대로 객체가 생성된다
- 아이디, 비밀번호 이름, 나이, 성별, 취미를 연손된 메모리 주소에 사용하도록 heap 에 공간을 만들었다
생성된 인스턴스의 초기값 확인하기
- 필드에 접근을 하기 위해서는 래퍼런스 변수명.필드명
- ’.’ 참조연산자라고 하는데 래퍼런스 변수가 참고하고 있는 주소로 접근한다는 의미를 가진다
- 각 공간은 필드명으로 접근한다. (배열은 인덱스로 접근. 객체는 필드명으로 접근)
객체지향의 4대원칙
- 캡슐화 - 은닉하고 싶은 정보를 은닉, 필요한 내용을 공개
- 상속
- 추상화
- 다형성
-출력값
id = user01
pwd = pass01
name = 홍길동
age = 20
gender = 남
hobby = 축구 야구 배구
member.id = null
member.pwd = null
member.name = null
member.age = 0
member.gender =
member.hobby = null
변경 후 member.id = user02
변경 후 member.pwd = pass02
변경 후 member.name = 유관순
변경 후 member.age = 21
변경 후 member.gender = 여
변경 후 member.hobby = 게임 뜨개질 십자수
캡슐화(encapsulation)
- 필드에 직접 접근하는 경우 발생할 수 있는 문제점을 이해할 수 있다
- 필드에 올바른 값이 들어가도 통재가 불가능하다
problem1
- Application
package section02.encapsulation.problem1;
public class Application {
public static void main(String[] args) {
/* 수업목표. 필드에 직접 접근하는 경우 발생할 수 있는 문제점을 이해할 수 있다(1)*/
/*필드에 올바르지 않은 값이 들어가도 통제가 불가능하다. */
Monster monster1 = new Monster();
monster1.name = "피카츄";
monster1.hp = 200;
System.out.println("monster1.name = " + monster1.name);
System.out.println("monster1.hp = " + monster1.hp);
Monster monster2 = new Monster();
monster2.name = "파이리";
monster1.hp = -200;
System.out.println("monster2.name = " + monster2.name);
System.out.println("monster2.hp = " + monster2.hp);
Monster monster3 = new Monster();
monster3.name = "이상해";
monster3.setHp(200);
System.out.println("monster3.name = " + monster3.name);
System.out.println("monster3.hp = " + monster3.hp);
Monster monster4 = new Monster();
monster4.name = "망나뇽";
monster4.setHp(-1000);
System.out.println("monster4.name = " + monster4.name);
System.out.println("monster4.hp : monster3,hp");
}
}
- Monster
package section02.encapsulation.problem1;
public class Monster {
//String name;
//int hp;
String name;
int hp; //전역변수, 필드변수, 인스턴스변수
public void setHp(int hp){
if(hp > 0) {
System.out.println("양수값이 입력되어 몬스터 체력을 입력한 값으로 변경합니다.");
this.hp = hp; //지역변수
}else{
System.out.println("0보다 작거나 같은 값이 입력되어 몬스터 체력을 0으로 변경합니다.");
this.hp = 0;
}
}
}
setHP를 이용해서 필드에 간접 전근하기
- hp에 음수가 저장하는 것을 방지하고자 hp가 양수인 경우에만 hp로 변경하고
- 0보다 작은 경우에 0으로 변경할 수 있도록 작성해보자
-
메소드를 이용하면 된다
- this는 인스턴스가 생성되었을 때 자신의 주소를 저장하는 래퍼런스 변수이다
- 지역변수와 전역변수의 이름이 동일한 경우 지역변수를 우선으로 접근하기 때문에
-
전역변수에 접근하기 위해서 this.를 명시해야 한다
- 출력값
monster1.name = 피카츄
monster1.hp = 200
monster2.name = 파이리
monster2.hp = 0
양수값이 입력되어 몬스터 체력을 입력한 값으로 변경합니다.
monster3.name = 이상해
monster3.hp = 200
0보다 작거나 같은 값이 입력되어 몬스터 체력을 0으로 변경합니다.
monster4.name = 망나뇽
monster4.hp : monster3,hp
댓글 남기기