개인/풀이

220103 과제

jumphare 2022. 1. 3. 21:45
회원정보를 클래스(MemberInput)에 입력받고 클래스(MemberInfo)의 멤버변수에 저장시킨 후 출력하는 프로그램
(단, 한 명의 회원정보를 받아 처리한다.

 

1. 설명 및 목표

  • 키보드를 이용해 각 회원들의 정보를 입력받는 클래스(MemberInput)를 작성한다 
  • 입력한 회원의 정보를 클래스(MemberInfo)의 private 멤버변수에 저장한다.
  • 클래스(MemberInfo)의 메소드를 이용해 출력한다.

 

2. 이론

 접근제어자(Access Modifier)는클래스 및 클래스의 구성 멤버에 대한 접근을 제한하는 역할을 한다. 클래스, 필드, 메소드, 생성자의 범위를 제한해줄 수 있다. 

 멤버변수(Field)란 메소드 바깥에 정의되는 변수로, 값이 heap 메모리 영역에 저장된다. 동일 클래스(생성자, 메소드) 안에서는 모두 사용이 가능하고, 다른 클래스에서 사용하고자 할 때는 참조형(클래스, 배열, 인터페이스)을 이용해 new 연산자로 객체를 생성하고 생성자로 값을 초기화한 뒤 heap 영역에 새로운 공간을 할당받는다. 이때 생성한 변수를 이용해 접근할 수 있다.

 물론 여기에 static이 붙으면 정적 멤버변수이므로 heap이 아니라 static 영역에 할당되므로 그때엔 new 연산자로 할당할 필요 없이 클래스명.연산자로 곧바로 접근할 수 있다. 또, static이 붙더라도 private가 붙어버리면 접근제어자에 의해 동일 클래스 내에서만 사용이 가능하므로 메소드를 이용해 접근하는 방식을 취해야 한다.

 this. 연산자는 매개변수와 필드명이 동일할 때 객체의 필드임을 명확히 하기 위해 사용한다.

 

 

3. 세부 내용

public class MemberInput {

	public static void main(String[] args) {

		int age;
		String name, email, address;
		Scanner sc = new Scanner(System.in);

		System.out.println("정보를 입력하세요");
		System.out.print("이름: ");
		name=sc.next();
		System.out.print("나이: ");
		age=sc.nextInt();
		System.out.print("이메일: ");
		email=sc.next();
		System.out.print("주소: ");
		address=sc.next();
		
		MemberInfo1 info=new MemberInfo1(name,age,email,address);
		info.print();
	}

}

 키보드를 이용해 각 회원들의 정보를 입력받는 클래스(MemberInput)로, main 메소드가 존재하고 있다. 위와 같이 이름, 나이, 이메일, 주소값을 차례로 입력받은 후 그 값을 생성자를 통해 MemberInfo1 클래스의 멤버변수의 값으로 초기화시킨다.

 이 때 new 연산자를 이용해 주소를 할당받은 변수 info를 이용해 MemberInfo1 클래스에 접근 가능하게 되었으므로, 변수 info를 이용해 MemberInfo1 클래스에 만들어둔 print 메소드를 마지막에 불러와 저장된 값을 출력시키도록 한다.

 

class MemberInfo1 {
	private String name;
	private int age;
	private String email;
	private String address;

	public MemberInfo1(String name, int age, String email, String address) { 
		this.name = name;
		this.age = age;
		this.email = email;
		this.address = address;
	}

입력받은 정보 값을 저장하는 클래스(MemberInfo1)이다. private로 지정된 멤버변수는 직접 그 값을 변경할 수 없으므로, public인 생성자를 이용해 MamberInput 클래스에서 받은 값으로 초기화한다. 이때 생성자의 매개변수와 멤버변수의 이름이 같으므로 값을 입력받는 부분이 객체의 필드임을 명확히 하기 위해 this.를 붙인다.

	public void print() {
		System.out.println("회원님의 정보");
		System.out.println("이름: " + name);
		System.out.println("나이: " + age);
		System.out.println("이메일: " + email);
		System.out.println("주소: " + address);
	}
}

값을 출력하는 MemberInfo1의 메소드.

 

 

4. 실행 결과

문제없이 입력한 값이 멤버변수로 저장되어 출력되었다.

 

 

5. 고찰

한 명만 값을 입력받아 멤버변수에 저장하는 것이기에 생성자를 이용하였다. 멤버변수를 초기화시키는 것이 생성자이고 이 생성자의 매개변수를 이용해 private인 멤버변수에 접근해 값을 초기화시켜줄 수 있다는 사실을 기억하고 있어 무난하게 해결할 수 있었다. 값을 입력할 때, name, email, address와 age의 자료형이 다르기 때문에 자잘하게 실수가 있었다. Scanner 클래스의 메소드도 다른 것을 써야 한다는 것을 유의하고, 매개변수로 값을 리턴할 때도 보내줄 변수의 위치와 자료형을 잘 확인해야 했다.

 

 

6. 전체 코드