본문 바로가기

IT코딩공부!

#9 메소드의 변환값(return)

[0] 접근제한자(Access Modifier)

- 접근 제한자(Access Modifier)

        [1] public(모든) = 공개
         : 적용대상 = 클래스, 필드, 생성자, 메소드
         : 모든 클래스에서 접근 가능

        [2] protected(패키지)
         : 적용대상 = 필드, 생성자, 메소드
         : 자식클래스가 아닌 다른 패키지에 소소된 클래스는 접근 불가능


        [3] default(상속 클래스) = 생략
         : 적용대상 = 클래스, 필드, 생성자, 메소드
         : 다른 패키지에 소소된 클래스는 접근 불가능

        [4] private(본인 클래스) = 비공개
         : 적용대상 : 필드, 생성자, 메소드
         : 자신이 아닌 다른 클래스에서 접근 불가능

// class

// 필드

 // 1.필드
    public int public1;
    protected int protected1;
    int default1;
    private int private1;

// 생성자

public  A(){

    }
    public void public2() {
        System.out.println("접근 제한자 public 메소드");
    }

    public void protected2() {
        System.out.println("접근 제한자 protected 메소드");
    }

    public void default2() {
        System.out.println("접근 제한자 default 메소드");
    }

    public void private2() {
        System.out.println("접근 제한자  private 메소드");
    }

// 메소드

 public static void main(String[] args) {
        // A객체 생성
        A a = new A();

        a.public1 = 1;
        a.protected1 = 2;
        a.default1 = 3;
        a.private1 = 4;

        System.out.println("public1 : " + a.public1);
        System.out.println("protected1 : " + a.protected1);
        System.out.println("default1a : " + a.default1);
        System.out.println("private1 : " + a.private1);

        // 3.메소드
        // 객체의 메소드 호출(실행)
        a.public2();
        a.protected2();
        a.default2();
        a.private2();

// main

public static void main(String[] args) {
        // (1) A 객체 생성
        // (2) a의 필드값 작성
        // (3) a의 필드값 출력
        // (4) a의 메소드 호출


        // 실행(main) 메소드

        // (1) A 객체 생성
        A a = new A();
        // (2) a의 필드값 작성
        a.public1 = 1;
        a.protected1 = 2;
        a.default1 = 3;
//      a.private1 = 4;

        // 접근제한자를 A클래스에서 private으로 선언해서
        // private1 필드는 A클래스에서만 사용할 수 있다...

        System.out.println("public1 : " + a.public1);
        System.out.println("protected1 : " + a.protected1);
        System.out.println("default1 : " + a.default1);
//      System.out.println("private1 : " + a.private1);

        // (4) a의 메소드 호출
        a.public2();
        a.protected2();
        a.default2();
//      a.private2();

// main2

public class C {

    public static void main(String[] args) {


        // (1) A 객체 a생성
        A a = new A();

        // (2) a의 필드값 선언 + 출력

        a.public1 = 1;
//    a.protected1 = 2;
//    a.default1 = 3;
//    a.private1 = 4;

        System.out.println("public1 : " + a.public1);
//    System.out.println("protected1 : " + a.protected1);
//    System.out.println("default1a : " + a.default1);
//    System.out.println("private1 : " + a.private1);

        // (3) a의 메소드 호출
        a.public2();
//    a.protected2();
//    a.default2();
//    a.private2();

        // protected : 패키지가 달라도 상속을 받는 사용 가능
        // defoult : 패키지가 다르면 안됨.

[1] Caleulator (class와 main)

// class

[1] 필드 작성안해도됨
[2] 생성자 작성안해도됨 (대신 매계변수 생성시 필수)
[3] 메소드
 void타입을 제외한 모든 메소드는 return값을 갖는다.
 public Calculator(){

    }

    // [3] 메소드
    // void타입을 제외한 모든 메소드는 return값을 갖는다.

    int add(int x, int y) {
        // x+y
        int result = x + y;
        return result; // 메소드값의 변환이 int여서 return 0; 초기값으로 나온다
        // return x+y
    }

    double avg(int x, int y) {
        // x X y
        double result = add(x, y) / 2.0;  // 위에 있는 메소드를 쓸수 있다 만약에 1,3을 각각 넣으면 int 타입 result는 4가 되고 double타입의 result는 2.0가 된다고 정의
        return result;
        // return x X y

//        int avg1( int x, int y){
//            // x X y
//            double result =(int) add(x, y) / 2;  // 위에 있는 메소드를 쓸수 있다 만약에 1,3을 각각 넣으면 int 타입 result는 4가 되고 double타입의 result는 2.0가 된다고 정의
//            return 0;
//            // return x X y

// main

import java.util.Scanner;

public class CalculatorMain {

    public static void main(String[] args) {

//        (1) Scanner 객체
        Scanner sc = new Scanner(System.in);

//        (2) Calculator 객체
        Calculator cal = new Calculator();
        // 앞에 있는 Calculator와 뒤에 있는 Calculator의 차이점은?
        // clss 와 생성자 차이 이다


        System.out.println("x값 입력 : ");
        int x = sc.nextInt();

        System.out.println("y값 입력 : ");
        int y = sc.nextInt();

        System.out.println("x+y : " + cal.add(x,y));
        System.out.println("x*y/2 : " + cal.avg(x,y));



        // 메소드의 return 값을 변수에 담을 수 있다
        double c = cal.add(x,y);
        double d = cal.avg(x,y);
        System.out.println("c : " + c);
        System.out.println("d : " + d);

        System.out.println(c+d);

데이터가 어떻게 흘러가고 있는 알기!! ( 합을 구하는 메소드)
곱하는 메소드( 이과정을 이해하자)


[2] Member (class와 main) 리턴값 공부!!!

public class Member {

    // 캡슐화
    // : 관련된 필드(속성)와 메소드(동작)을 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉)
    // : 특정 필드나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은것!

    // String타입의 아이디(id), 비밀번호(pw), 이름(name),
    // 생년월일(birth), 이메일(email), 연락처(phone)

    private String id;
    private String pw;
    private String name;
    private String birth;
    private String emali;
    private String phone;

    // [2] 생성자
    // (1) 기본생성자, 매개변수 생성자

    public  Member(){

    }

    Member(String id, String pw, String name, String birth, String emali, String phone) {

        this.id = id;
        this.pw = pw;
        this.name = name;
        this.birth = birth;
        this.emali = emali;
        this.phone = phone;
    }

    // [3] 메소드
    // (1)정보출력 메소드

    void MerInfo() {
        System.out.println("아이디 : " + id);
        System.out.println("비번 : " + pw);
        System.out.println("이름 : " + name);
        System.out.println("birth : " + birth);
        System.out.println("이메일 : " + emali);
        System.out.println("번호 : " + phone);
    }

    // 아이디 입력 메소드
    void setId(String id) {
        this.id = id;
    }
    // 아이디 출력 메소드
    String getId(){
        return id;
    }

// class

public class MemberMain {

    public static void main(String[] args) {

        // (1) Member객체 생성, (2) id = "icia", (3) pw = "1234", (4) 메소드 사용


//        Member member = new Member("icia", "1234", "인천일보", "230331", "21321321","ㄴㅇㄴㅇ");

        Member member = new Member();

//      아이디만 출력
        member.setId("icia");  // >> private 필드에 접근하는 방법
//        member.id  = "icia"; >> 그냥 필드에 접근
        System.out.println("id : " + member.getId());
//        member.pw = "1234";
//        System.out.println("pw : " + member.pw);

        member.MerInfo();

[3] Member2 (class와 main)

// class

// 필드

private String id;
    private String pw;
    private String name;
    private  String birth;
    private  String email;
    private  String phone;

// 생성자

public  Menber(){

    }
    // Alt + Insert 사용시 자동 생성!!!
    public Menber(String id, String pw, String name, String birth, String email, String phone) {
        this.id = id;
        this.pw = pw;
        this.name = name;
        this.birth = birth;
        this.email = email;
        this.phone = phone;
    }

// 메소드 Alt + Insert(단축키)!!! 오버라이드 생성!!

   // Alt + Insert 사용시 자동 생성!!!
    // geter , seter

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPw() {
        return pw;
    }

    public void setPw(String pw) {
        this.pw = pw;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
    // Alt + Insert 사용시 자동 생성!!!
    // toString
    @Override // 오버라이딩 == 출력이 된다.
    public String toString() {
        return "Member[" +
                "id=" + id +
                ", pw=" + pw +
                ", name=" + name +
                ", birth=" + birth +
                ", email=" + email +
                ", phone=" + phone +
                ']';
    }

// main

1. 정보입력
2. 정보출력
3. 정보 수정
4. 종료

// 기본변수 생성 및 배열 지정!

Scanner sc = new Scanner(System.in);

        Menber[] member = null;


        int Mem = 0;

        boolean run = true;

        int menu;

// 기본 출력 (while문으로 반복)

while (run) {
            System.out.println();
            System.out.println("1. 정보입력 | 2. 정보출력 | 3. 정보수정 | 4. 종료");
            System.out.println();
            System.out.println("선택 : ");
            menu = sc.nextInt();

// 기본 입력 (switch문으로 반복) case1 :

switch (menu) {
                case 1:
                    System.out.println("몇명 : ");
                    Mem = sc.nextInt();
                    member = new Menber[Mem];

                    for (int i = 0; i < member.length; i++) {
                        Menber mem = new Menber();

                        System.out.println((i + 1) + "번");
                        System.out.println("아이디 : ");
                        mem.setId(sc.next());

                        System.out.println("비번 : ");
                        mem.setPw(sc.next());

                        System.out.println("이름 : ");
                        mem.setName(sc.next());

                        System.out.println("생년 : ");
                        mem.setBirth(sc.next());

                        System.out.println("이메일 : ");
                        mem.setEmail(sc.next());

                        System.out.println("번호 : ");
                        mem.setPhone(sc.next());

                        member[i] = mem;
                    }
                    break;

// 기본 입력 (switch문으로 반복) case2 : 조원을 출력하기 위한 for문으로 반복해서 마지막 메소드 toString 사용

case 2:
                    for (int i = 0; i < member.length; i++) {
                        System.out.println((i + 1) + "조원");
                        System.out.println(member[i].toString());
                        System.out.println();
                    }
                    break;

// 기본 입력 (switch문으로 반복) case3 : 정보수정을 위해 조건문으로 메소드을 입력받는다(sc.next())

// 새로운 배열을 입력받기 위해 member로 0으로 초기화

case 3:

                    System.out.println("정보 수정 : ");
                    String Name = sc.next();
                    for (int i = 0; i < member.length; i++) {
                        Menber mem = new Menber();

                        if (Name.equals(member[i].getName())) {

                            System.out.println((i + 1) + "번");
                            System.out.println("아이디 : ");
                            mem.setId(sc.next());

                            System.out.println("비번 : ");
                            mem.setPw(sc.next());

                            System.out.println("이름 : ");
                            mem.setName(sc.next());

                            System.out.println("생년 : ");
                            mem.setBirth(sc.next());

                            System.out.println("이메일 : ");
                            mem.setEmail(sc.next());

                            System.out.println("번호 : ");
                            mem.setPhone(sc.next());

                            // 새로운 정보 수정!
                            member[i] = mem;

                        }
                    }
                    break;

// 기본 입력 (switch문으로 반복) case4,5 : 마지막 4.5은 switch문에 고정문법이다.

case 4:
                    run = false;
                    System.out.println("프로그램 종료");
                    break;
                default:
                    System.out.println("다시 입력하세요");
                    break;

[4] Member2 (main) 선생님 코드!!

package Java0331_1;

import java.util.Arrays;
import java.util.Scanner;

public class Members {

    // main 메소드 사용!!
    // 1. 정보입력
    // 2. 정보출력
    // 3. 정보수정
    // 4. 종료

    public static void main(String[] args) {

        // 입력을 받기 위한 Scanner 객체
        Scanner sc = new Scanner(System.in);

        // 한 사람의 정보를 담기 위한 Member 객체
        Member member = new Member();

        // 회원들의 정보를 담기 위한 Member 배열
        Member[] members = new Member[0];

        // members에는 어떤 타입의 데이터 들어올 수 있는가?
        // Member클래스의 필드값 (여러개)

        String[] strArr = null;

        // 프로그램 실행을 위한 변수
        boolean run = true;

        // 프로그램 실행!
        while(run){
            System.out.println("=========================================");
            System.out.println(" 1.정보입력 | 2.정보출력 | 3.정보수정 | 4.종료");
            System.out.println("=========================================");
            System.out.print("선택 >> ");

            // 항목을 선택하기 위한 변수 menu에 숫자를 입력받는다.
            int menu = sc.nextInt();

            switch (menu){
                case 1:
                    // 한사람의 정보를 입력받기 위한 member 객체
                    // 초기화 하기 위해서 new Member() 실행
                    member = new Member();
                    
                    // 한사람의 정보를 입력받기 위해서 
                    // 기존에 있던 members배열을 복사하고 크기를 1증가 시킨다.
                    members = Arrays.copyOf(members, members.length+1);
                    
                    // 정보 입력
                    System.out.print("아이디 >> ");
                    // Member클래스의 필드 id의 접근제한자를 private로 설정했기 때문에
                    // member.id = sc.next();

                    member.setId(sc.next());
                    // 입력(저장) : setter(), set
                    // 출력 : getter(), get

                    System.out.print("비밀번호 >> ");
                    member.setPw(sc.next());

                    System.out.print("이름 >> ");
                    member.setName(sc.next());

                    System.out.print("생년월일 >> ");
                    member.setBirth(sc.next());

                    System.out.print("이메일 >> ");
                    member.setEmail(sc.next());

                    System.out.print("연락처 >> ");
                    member.setPhone(sc.next());

                    // 종이에 작성한 영역

                    // 작성한 정보를 파일에 담는 과정
                    members[members.length-1] = member;
                    // members[i] = member;
                    // 회원목록 파일에 회원정보를 담는다.
                    break;
                    
                case 2:
                    // 배열의 크기만큼 반복문 실행
                    for(int i=0; i< members.length; i++){
                        // 회원정보 출력
                        System.out.println(members[i].toString());
                    }
                    break;

                case 3:
                    // 어떤 사람의 정보를 수정할지 선택
                    // 아이디(id)를 기준으로 검색
                    System.out.print("변경할 아이디 >> ");
                    String id = sc.next();

                    // 해당 아이디 존재 여부 확인
                    int check = 0;

                    // 회원의 명수 만큼 반복
                    for(int i=0; i<members.length; i++){

                        // 입력한 아이디(id)가
                        // 회원목록에 있는 아이디(members[i].getId())와 같은지 확인
                        if(id.equals(members[i].getId())){

                            // member객체 초기화
                            member = new Member();

                            // 아이디 저장
                            member.setId(id);

                            // 패스워드 변경
                            System.out.print("비밀번호 >> ");
                            member.setPw(sc.next());

                            // 이름 변경
                            System.out.print("이름 >> ");
                            member.setName(sc.next());

                            // 생년월일 변경
                            System.out.print("생년월일 >> ");
                            member.setBirth(sc.next());

                            // 이메일 변경
                            System.out.print("이메일 >> ");
                            member.setEmail(sc.next());

                            // 연락처 변경
                            System.out.print("연락처 >> ");
                            member.setPhone(sc.next());

                            // 정보 입력시
                            // members[members.length-1] = member;

                            // 정보 수정
                            members[i] = member;

                            check++;
                        }

                    }

                    // for문 밖에서 아이디 유무 확인
                    if(check==0){
                        System.out.println("해당하는 아이디가 없습니다.");
                    }

                    break;

                case 4:
                    // 프로그램 종료(반복문 종료)를 위해 
                    // run의 값을 true에 false로 변경!
                    run = false;
                    break;

                default:
                    System.out.println("잘못 입력했습니다.");
                    break;
            }
        }
    }
}