문법/JAVA

클래스와 아이들

Funold 2023. 10. 23. 21:08
- 클래스를 만듦 => main 에서 클래스를 이용해 new 키워드와 생성자 사용해 객체 생성.
        - public 접근제어자를 선언하면 어디에서도 사용할 수 있음
        - 생성자를 호출하기 위해 new 키워드 이용. => 새로운 객체 생성
        - 클래스로 만든 객체 까지도 배열로 관리 가능
        - main서 생성된 객체는 생성된 클래스의 필드변수타입, 메서드도 가지게 됨
        - ex) Main { car1.changeGear('P'); } => 생성된 클래스의 메서드 호출 => 필드 변경가능
        - 객체안에서 다뤄지는 변수와 같은 데이터들
        - ex) class {
<고유 데이터>
       String company;
                String model = "Lamborghini";
                String color ;
                double price;
<상태 데이터> 
       double speed;
                char gear;
                boolean lights = true;
<객체 데이터(부품 클래스)>
        Tire tire = new Tire ();
        Door door;
        Handle handle;
        }
        - 객체를 가지고 일처리를 하기 위해 필요한 부가 개념들(상속, 호출...)
        - Class는 하위 Class를 가질 수 있다.
        - 필드에 필드 변수 선언을 하고 할당을 하지 않으면 각 타입에 따라 기본값으로 초기화된다.
        - 필드 값의 변경, 읽는 것 => 필드의 사용
        - 클래스에 필드를 정의, 선언했다고 바로 사용할 수 있는 게 아니다.
        - 인스턴스화 필요 => 객체를 생성 후 필드 사용 가능
        - 필드 접근 법
        - 외부 접근
        - Car car = new Car(); 생성 후 참조변수  car로 외부에서 객체 내부 필드에 접근 가능
        - 도트(.) 연산자 사용 => car.color = "blue";
        - 내부 접근
        - 도트 연산자를 사용, 외부에서 객체 내부 접근. 또한 객체 내부 메서드에서도 내부필드에 접근 가능
        - double brakePedal() {
        speed = 0;}
        return speed;
        }
        - =>breakPedal() 메서드 내부에서 객체 필드 바로 호출 및 사용 가능
        - void method return ( ) { } 리턴 값이 없으면 'void' / 없으면 반드시 return문이 있어야 한다.
        -  메서드가 void가 아니더라도 return문을 넣어 원하는 지점에서 메서드를 종료 할 수 있다.
        - 매개변수 : 메서드를 호출할 때 메서드로 전달하려는 값을 받기 위해 사용되는 변수
        - 해당 매개변수에 값을 전달하려면 '순서'와 '타입'을 맞춰서 넣어줘야 한다.
        - 가변길이의 매개변수 선언 가능(spread문법)
        - ex) void carSpeeds (double ... speeds) {
        for ( double v : speeds ) {
        system.out.println ("v = " + v );
        }
        }
        - 메서드를 호출한다 : 객체를 만들고 호출 객체.메서드명(매개변수)
        - 오버로딩 : 같은 이름의 메서드지만 매개변수만 다르게 받아 각각 다르게 사용하는 기능
        - 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 한다.
        - 접근 제어자만 달라도 오버로딩 불가능
        - 메서드 이름 하나로 상황에 따른 동작 개별 정의
        - 메서드의 이름  절약
        ex)
        (1) public 'Car'(String modelName) {
        (2) public 'Car'(String modelName, String colorName) {
        (3) public 'Car'(String modelName, String colorName, double priceValue) {
        - 기본형 매개변수 : 값 자체가 복사 => 변수의 원본 값은 변경x
        - 참조형 매개변수 : 주소 값이 복사 => 원본 값이 변경됨
        - Class
        - 필드
        - 생성자 : 객체를 생성하는 방식을 정의.(생성자) => 변수를 넣은 필드를 어떻게 정의할 것인가
        - 메서드
        =>필드와 메서드를 묶어 멤버라고 한다.
        - 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
        - 객체를 생성해야 사용
        - 객체의 인스턴스 필드는 각각의 인스턴스 마다 고유하게 값을 가짐
        - 객체의 메서드들은 메서드 영역에 두고 인스턴스들이 공유해서 사용
        - 단, 무조건 객체를 생성 => '인스턴스'를 통해서만 메서드가 사용될 수 있도록 제한**
        - 인스턴스 메서드도 클래스 필드 사용 가능하다.
        - 클래스 멤버 = 클래스 필드 + 클래스 메서드
        - 자바의 클래스의 로더에 의해 메서드 영역이 저장됨
        - 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버 => 인스턴스화 필요 없이 바로 사용 가능
        - 클래스가 고유값을 가질 때, 변하지 않을 때
        - 선언
        - static 키워드 사용
        - 인스턴스마다 모두 가지고 있을 필요는 없는 공용적인 데이터를 저장
        - 인스턴스 필드를 사용하지 않고 실행되는 메서드가 존재한다면 static 키워드를 사용, 클래스 메서드로 선언하는 것이 좋다.
        - => 인스턴스 사용 불가 ** '3-6 0810'
        - =>필드와 메서드는 서언하는 방벙에 따라서 인스턴스, 클래스 멤버로 구분
        - 클래스 멤버 사용
        Car. company = "Audi";
        String companyName = Car.setCompany("Benz");
        - 클래스 이름과 함께 도트(,) 연산자 사용
        Car car = new Car(); // 객체 생성
        car.company = "Ferrari";
        String companyName2 = car.setCompany("Lamborghini");
        - 참조형 변수를 사용, 클래스 멤버에 접근은 가능하지만 추천 ㄴㄴ
        - 클래스 이름으로 접근하자 좋은 말 할 때
        - 지역변수 :
        - 해당 메서드가 실행 될 때마다 독립적인 값을 저장, 관리.
        - 이 메서드가 종료될 때 소멸
        - final 필드와 상수 : 최종적 => 상수 => **절대로 수정 불가능**
        - 주로 'static final classType var' => 공용적으로 쓰이고 수정 불가능
        - 관례적으로 전부 대문자로 작성 ex) NOCAMELCASE
        - 생성자 (constructor)
        - 객체가 생성될 때 호출하며 객체를 초기화 하는 역할 수행 => 사용하기 위해
        ex) public Car () { logic } // 선언
        ...
        Car car = new Car(); // 객체 생성 => 선언된 생성자의 메서드 호출
        - 기본 생성자 : 선언시 괄호() 안에 아무것도 넣지 않는 생성자.
        - 모든 클래스에 하나 이상 존재
        - 컴파일러에 의해 자동으로 생성 됨 => 생략 가능
        - 해당 클래스의 '접근제어자'를 그대로 따른다.
        - 클래스에 기본이 아닌 '일반 생성자'를 선언시, 기본 생성자가 자동으로 생성 되지 않음
        ex) public calss Car {
public Car('String model') { } // 일반 생성자 선언
        }
        => 객체 생성시
        Car car = new Car('model'); <- 넣어줘야한다.
        Car car = new Car(); <- 안됨
        - 필드 초기화
        - 인스턴스 생성 때마다 다른 값을 가져야 한다면 생성자를 통해 필드를 초기화 할 수 있다.
        - 인스턴스를 생성할 때마다 같은 기본 값을 고정해줘야 한다면, **필드에 초기값을 직접 대입**한다. => 초기화

다시듣고 또 듣고. 우선 남기고 재정리를 기약한다.

'문법 > JAVA' 카테고리의 다른 글

Entity…나는 응답한다…!  (1) 2023.12.08
가막눈 쑤준  (1) 2023.11.16
저 객체가 그 객체요? ???  (0) 2023.10.26
상속  (0) 2023.10.21
스레드와 스레드, 그리고 스레드.  (1) 2023.10.19