스크린샷 2025-08-08 오후 3.52.18.png

package com.haenin.section01.user_type;

import java.util.Arrays;

    /* 설명.
     *   객체지향프로그래밍(oop)란?
     *   OOP(Object Oriented Programming language)
     *   : 추상화, 캡슐화, 상속, 다형성을 적용하여 유지보수성을 고려한
     *     응집력 높고 결합도 낮은 객체 위주의 개발방식을 추구하는 프로그래밍을 말한다.
     *
     *  설명.
     *   객체지향의 특징(4대 특징)
     *   - 추상화(Abstraction)  ( 이걸 빼면 3대 특징 )
     *   - 캡슐화(Encapsulation)
     *   - 상속(Ingeritance)
     *   - 다형성(Polymorphism)
     * */

public class Application {
    public static void main(String[] test) {

        /* 설명. 클래스 없이 여러 타입으로 여러 값을 관리할 경우 */
        /* 설명.
        *   1. 많은 변수들을 따로 관리하기 어렵다.(한 묶음으로 생각하거나 코딩할 수 없다.)
        *   2. 메소드의 전달인자로 전달할 값이 많아지므로 매개변수의 갯수가 늘어난다.
        *       (냄새나는 코드 -> 리팩토링의 징조)
        *   3. 메소드의 반환형으로는 하나의 타입만 가능하지만
        *       클래스가 없이는 여러 속성을 반환하는 것이 불가능*/

        System.out.println(Arrays.toString(test));
        Member member1 = new Member();
        Member member2 =new Member();

        /* 설명. 사람 한명씩 접근해 이름을 부여하는 느낌의 코드 */
        member1.name="김철수";
        member2.name="김영희";

        /* 설명. 김영희씨만 우선 완성해보자 */
        member2.age = 19;
        member2.gender = '여';
        member2.hobbies = new String[]{"볼링", "하키"};
        member2.id="user02";
        member2.pwd="pass02";

        System.out.println("김영희씨의 이름과 나이를 말해주세요 : \\n"
                            + member2.name + "이구요, 나이는 "
                            + member2.age + "입니다. ");

        int num= 1;
        testMethod(member2, num);
        System.out.println("개명 이후 이름: "+ member2.name);
        System.out.println("메소드를 호출할 때 넘겨준 num의 값: "+ num);

        /* 설명.
        *   기본자료형의 값을 넘길 때 vs 참조자료형의 값을 넘길 때
        *   1. 기본자료형은 메소드를 호춫한 곳이 영향을 받지x
        *   2. 참조자료형은 메소드를 호출한 곳이 영향을 받을 수 o( 반환할 필요 X)
        *  */
    }

    private static void testMethod(Member m, int n) {
        System.out.println("개명하고 싶어!~ ");
        m.name="김용희";
        n += 10;
        System.out.println("메소드 안에서의 n의 값: "+ n);
    }
}

package com.haenin.section01.user_type;

/* 설명.
*   1. 여러 타입을 저장할 수 있는 단위(일종의 c++의 구조체의 개념)
*   2. 하나의 객체를 만들기 위한 도구
*   3. 사용자 정의형 타입(자료형)
* */
public class Member {
    String id;
    String pwd;
    String name;
    int age;
    char gender;
    String[] hobbies;
}