230310 풀스택 7일차 - JAVA기초(배열, 클래스)

황인성·2023년 3월 10일
0

변수는 8바이트 이하의 값으로 이루어져 있고 스택에 바로 저장됨

문자열이 필요하거나 동적 데이터가 필요할 땐 스택에 주소값만 저장되서 주소값을 불러오게되면 실제 데이터를 컨트롤 할 수 있다.
객체가 이런 식으로 동작한다. (리모컨 시스템)

모든 변수는 메모리에 저장된다.
int 변수는 4바이트 이다.
변수에는 오직 8바이트 이하의 값만 넣을 수 있다.
객체가 필요한 이유
변수에는 오직 값 1개만 넣을 수 있다.
프로그래밍을 하다보면 변수에 값을 여러개 넣을 필요가 있을 때가 있다.
그래서 고안된 것이 객체이다.
객체는 커피 캐리어에 비유될 수 있다.
커피 캐리어에는 커피를 여러잔 담을 수 있다.
커피 캐리어는 용도에 따라 종류가 여러가지 있다.
프로그래밍을 할 때 상황에 따라 서로 다른 종류의 객체 여러개가 필요하다.
객체를 일종의 제품으로 보았을 때 객체를 만들기 위해서는 설계도 즉 클래스가 필요하다.
객체는 너무 커서 변수에 담을 수 없다.
그래서 또 고안된 것이 리모콘 시스템이다.
클래스로는 3가지를 할 수 있다.
클래스로는 객체도 만들 수 있고 그 객체를 조종할 수 있는 리모콘도 만들 수 있다. 그리고 또 객체리모콘을 담을 변수(레퍼런스 변수)도 만들 수 있다.
변수에는 오직 1차원적인 값만 저장 할 수 있다.
1차원 적인 값(데이터)
5
3.14
'a'
true
복잡한 값
객체
변수에는 객체를 저장할 수 없다.
객체가 너무 크고 변수는 작다.
객체는 여러가지 값(데이터)의 조합이다. 그게 변수에 들어가면 한 덩어리로 해석된다.
즉 변수에 1과 2를 넣으면, 다른 사람들은 그것을 1과 2의 조합이 아닌 12로 본다.
new 사람();을 하면 2가지가 만들어진다.
객체
객체가 자기자신을 조종할 수 있는 리모콘
그 리모콘을 객체 스스로는 this 라고 부른다.


// 클래스를 새로 만들어서 새로만든 클래스에 변수를 선언 및 초기화 하고 
// 원래 있던 클래스에서 새로만든 클래스 안에 변수값을 불러와보자
public class _20_Class {
    public static void main(String[] args) {
        int[] arr = new int[3];
//        설계도 a설계도 = new 설계도();
//        a설계도.no = 1;
//        a설계도.age = 1;
//        a설계도.height = 1;

        자동차 a자동차 = new 자동차();
        System.out.println(a자동차.a);
        System.out.println(a자동차.b);
        System.out.println(a자동차.f);

    }
}

class 자동차 {
    int a = 2;
    boolean b = a < 3;
    float f = 3.14f;
}
// 문제 : 레퍼런스변수에 값 할당과정 설명

class Main {
    public static void main(String[] args) {
        // 오직 자동차 리모콘만 저장 할 수 있는 변수 `a자동차`를 만든다.
        // `a자동차` 에는 자동차 클래스로 만든 리모콘(쓰레기 리모콘)이 들어가게 된다.
        자동차 a자동차;

        // 자동차 설계도(클래스)로 자동차 객체를 변수 외!부!에 만든다.
        // 자동차 객체는 자신을 조종할 수 있는 리모콘(this)를 가지고 태어난다. 즉 자동차 객체 만들 때 자동차 리모콘도 같이 만들어진다.
        // 자동차 객체는 자신이 들고 있는 리모콘(this)를 복사해서 반환한다.
        // a자동차 안에 들어있던 쓰레기 리모콘이 진짜 리모콘으로 대체된다.
        a자동차 = new 자동차();

        // `a자동차` 변수에 안에 있는 리모콘의 `달리다` 버튼을 누른다.
        // 해당 신호가 리모콘과 연결되어 있는 자동차 객체에 전달되어 `달리다` 기능이 실행된다.
        a자동차.달리다();

        // 모든 객체들은 서로를 평생 볼 수 없다.
        // 모든 객체들은 서로를 원격조종한다.
    }
}

// 자동차 설계도!, 절대 자동차가 아니다.!!!
class 자동차 {
    // 이 메서드(함수)의 2가지 용도
    // - 객체 만들때 : 실제 기능
    // - 리모콘 만들때 : 리모콘 버튼
    void 달리다() {
      	System.out.println("자동차가 달립니다.");
    }
}

클래스 생성하고 동적 데이터를 이용해서
가상의 캐릭터들 이름, 나이, 키를 소개하기.

public class _22_static_void {
    public static void main(String[] args) {
        캐릭터 이광수; // 클래스 이름
        이광수 = new 캐릭터();
        이광수.이름 = "이광수";
        이광수.나이 = 31;
        이광수.= 191;

        캐릭터 유재석;
        유재석 = new 캐릭터();
        유재석.이름 = "유재석";
        유재석.나이 = 42;
        유재석.= 178;


        캐릭터 지석진;
        지석진 = new 캐릭터();
        지석진.이름 = "지석진";
        지석진.나이 = 54;
        지석진.= 172;

        이광수.자기소개(); // void 출력
        유재석.자기소개(); // void 출력
        지석진.자기소개(); // void 출력


    }
}
class 캐릭터 {
    int 나이; // 나이 선언
    int; // 키 선언
    String 이름; // 이름 선언

    void 자기소개 () { // 리모컨 역할
        System.out.println("안녕하세요. 제 이름은 " + 이름 + "이고, 나이는 " + 나이 + "살 이고, 키는" ++ "입니다." );
//        System.out.println("제 이름은 " + this.이름 + "입니다." ); // 해당 객체데이터에 접근할 땐 this.을 사용함
    }
}

출력
안녕하세요. 제 이름은 이광수이고, 나이는 31살 이고, 키는191입니다.
안녕하세요. 제 이름은 유재석이고, 나이는 42살 이고, 키는178입니다.
안녕하세요. 제 이름은 지석진이고, 나이는 54살 이고, 키는172입니다.

인스턴스가 뭐지
인스턴스화 --> 캐릭터 유재석 = new 캐릭터();

static 개념

// static을 이용해서 전역변수처럼 값을 가져와서 인류평균나이를 계산해보자.

public class _22_static_keyword {
    public static void main(String[] args) {
        Person aPerson = new Person();
        aPerson.나이 = 100;
        aPerson.인류평균나이 += 100;
        aPerson.이름 = "박명수";

        Person bPerson = new Person();
        bPerson.나이 = 200;
        bPerson.인류평균나이 += 200;
        bPerson.이름 = "하하";

        Person cPerson = new Person();
        cPerson.나이 = 300;
        cPerson.인류평균나이 += 300;
        cPerson.이름 = "정준하";

        aPerson.자기소개();
        bPerson.자기소개();
        cPerson.자기소개();

        Person.인류평균나이();
    }
}
class Person {
    int 나이;
    String 이름;
    static int 인류평균나이;

    void 자기소개 () {
        System.out.println("저는 " + this.이름 + "이고 제 나이는 " + this.나이 + "살 입니다.");
    }
    static void 인류평균나이 () {
        System.out.println("인류 평균나이는 " + 인류평균나이 / 3 + "살 입니다.");
    }
}

출력
저는 박명수이고 제 나이는 100살 입니다.
저는 하하이고 제 나이는 200살 입니다.
저는 정준하이고 제 나이는 300살 입니다.
인류 평균나이는 200살 입니다.

프로그래머스 자바 입문

객채 == 인스턴스 == 폴더
클래스 == 인스턴스 설계도 == 폴더 설계도 == 설계도
객체변수 == 인스턴스 변수

설계도를 통해 나온 객체를 인스턴스화 한다고 표현한다.
그렇게 인스턴스화된 객체는 인스턴스객체라고 표현한다.

통상적으로 인스턴스 = 객체 라고 이해하면 편하다.

인스턴스라는 말이 설계도를 통해서 만들었다라는 의미를 내포하고 있다.

같은 객체냐는 말은 실제 담고있는 데이터가 같냐 라고 묻는 것.

참조하는 인스턴스가 주소값
객체가 데이터(할당값, 내용물 자체)

기본형 int char float 등등

참조형 String 참조형은 앞에 대문자로 시작함.

영어 공부할때 문법 달달 외운다고 영어 독해가 가능하지않듯이
독해문장을 계속 봐야 독해가 가능하듯이

코딩도 논리성을 갖춘 언어공부기 때문에 논리성을 공부를 해야한다.
코드몽키같은 코드게임을 깨는게 논리성을 키우기 위한 연습임.

논리성(독해력)을 키워야 문법구조를 조금만 설명해도 잘 알아들을 수 있다.
JAVA나 C같이 언어라고 표현하는 것들은 독해력이 중요하고 이것이 받쳐줘야 나아가서 프로그램도 짤 수 있다.

profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글