ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이것이 자바다 6장 5-9
    JAVA 2022. 11. 20. 11:38

    # 6.5 클래스의 구성 멤버

     

    public class className (
    
    	// 필드 선언 (객체의 데이터가 저장 되는 곳)
        int fieldName:
        
        // 생성자 선언 (객체 생성 시 초기화 역할)
        ClassName() {
        
        // 메소드 선언 (객체가 수행할 동작)
        intMethodName() {
        
        
        
        ....
        
        
        }}}

     

    메소드

    메소드 ~~ 함수

    but, 객체의 내부 함수는 메소드라고 부른다.

    메소드는 객체와 객체 간의 상호작용을 위해 호출된다.

     

     

    # 6.6 필드 선언과 사용

    -필드 : 객체의 데이터를 저장하는 역할

     

     

    객체의 데이터에는 고유 데이터, 현재 상태 데이터, 부품 데이터가 있음.

     

     

    필드 선언하는 방법은 -> 변수 선언과 같음 (단, 클래스 블록 내에서 선언해야 한다)

     

    타입 필드명 [= 초기값];

     

    class class Car = {
    	String model = "그렌져"; //고유 데이터 필드
        int speed = 300;       // 상태 데이터 필드
        boolean start = true;  // 상태 데이터 필드
        Tire tire = new Tire() // 부품 객체 필드
    }

     

     

     

     

    초기값 설정 안 하면 ->  객체 생성 시 자동으로 기본값으로 초기화.

    필드 타입별 기본값

    분류 데이터 타입 기본값
    기본 타입 정수 타입 byte 0
    char \u0000(빈 공백)
    short 0
    int 0
    long 0L
    실수 타입 float 0.0F
    double 0.0
    논리 타입 boolean false
    참조 타입 배열 null
    클래스(String 포함) null
    인터페이스 null

     

     

    // Car.java
    
    package ch06.sec06.exam01;
    
    public class Car {
    	// 필드 선언
    	String Model;
    	boolean start;
        int speed;
    }
    // CarExample.java
    
    package ch06.sec06.exam01;
    
    public class CarExample {
    	public static void main(String[] args) {
        
        // Car 객체 생성
        Car myCar = new Car();
        
        // Car 객체의 필드값 읽기
        System.out.println("모델명 : " + myCar.model);
        System.out.println("시동여부 : " + myCar.start);
        System.out.println("현재속도 : " + myCar.speed);
        
    }
    
    
    // 모델명 : null
    // 시동여부 : false
    // 현재속도 : 0

     

     

     

     

     

    필드 사용이란 

     

    필드 값을 읽고 변경하기

    // Car.java
    
    package ch06.sec06.exam02;
    
    public class Car {
    	// 필드 선언
        String company = "현차";
    	String model = "그렌져";
        String color = "검정";
        int maxSpeed = 350;
        int speed;
    }
    // CarExample.java
    
    package ch06.sec06.exam02;
    
    public class CarExample {
    	public static void main(String[] args) {
        
        // 객체 생성
        Car myCar = new Car();
        
        // Car 객체의 필드값 읽기
        System.out.println("제작회사 : " + myCar.company);
        System.out.println("모델명 : " + myCar.model);
        System.out.println("색깔 : " + myCar.color);
        System.out.println("최고속도 : " + myCar.maxSpeed);
        System.out.println("현재속도 : " + myCar.speed);
        
        // Car 객체의 필드값 변경
        myCar.speed = 60;
        System.out.println("수정된 속도 : " + myCar.speed);
        }
    }
    
    // 제작회사 : 현차
    // 모델명 : 그렌져
    // 색깔 : 검정
    // 최고속도 : 350
    // 현재속도 : 0
    // 수정된 속도 : 60

     

     

    # 6.7 생성자 선언과 호출

     

    클래스 변수 = new 클래스();
    		 //생성자 호출

    new 연산자는 객체를 생성 -> 생성자 호출 -> 객체 초기화 (필드 초기화 || 메서드를 호출 => 객체를 사용할 준비를 하는 것)

     

    기본 생성자

    모든 클래스에는 생성자가 하나 이상 존재.

    클래스 선언이 없다면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가.

    [public] 클래스() {...}

    클래스가 public class로 선언되면 기본 생성자도 public이 붙고, 클래스가 class로만 선언되면 기본 생성자에도 public이 붙지 않음.

     

    public class Car {
    
    }
    // 바이트 코드 파일
    
    public class Car {
    	public Car() { } //자동 추가
    }

     

    따라서 자동으로 기본 생성자를 추가해주니까 ->  new 연산자 뒤에 기본 생성자를 호출할 수 있음.

    Car myCar = new Car();
    	//기본 생성자 호출

     

    생성자 선언

    객체를 다양하게 초기화하기 위해 -> 생성자 직접 선언 가능

    클래스 (매개변수, ...) {
    	//객체의 초기화 코드
    }
    => 생성자 블록

    생성자는 메서드와 비슷하게 생김. but 리턴 타입이 없고 클래스 이름과 동일.

    매개변수는 new 연산자로 생성자를 호출할 때

    매개 값을 생성자 블록 내부로 전달하는 역할을 함.

     

    Car myCar = new Car("그랜져", "검정", 300);
    
    public class Car {
    	//생성자 선언
    	Car(String model, String color, int speed) {...}
    }

     

    필드 초기화

    객체마다 동일한 값 -> 필드 선언 시 초기값 대입

    객체마다 다른 값 -> 생성자에서 필드 초기화

     

    package ch06.sec06.exam02;
    
    public class Korean {
    //필드 선언
    	String nation = '대한민국';
        String name;
        String ssn;
        
        //생성자 선언
        public Korean(String n, String s) {
        	name = n;
            ssn = s;
        }
    }
    package ch06.sec06.exam02;
    
    public class KoreanExample {
    	public static void main(String[] args) {
        // Korean 객체 생성
    	Korean k1 = new Korean("자바", "011")
        
        
        // Korean 객체 하나 더 생성
    	Korean k2 = new Korean("자스", "016")
        System.out.println("k2.nation :", k2.nation)
        System.out.println("k2.name :", k2.name)
        System.out.println("k2.ssn :", k2.ssn)
       	}
    }

     

     

    매개변수 명이 필드 명과 동일한 경우에 필드임을 구별하기 위해 -> this 키워드를 붙여 준다.

     

    생성자 오버 로딩

    매개 값으로 객체를 다양하게 초기화하려면 생성자 오버 로딩이 필요.

    오버로딩 : 매개변수를 달리하는 생성자를 여러 개 선언하는 것을 말함.

    public class Car {
        Car() { }
        Car(String model) { }
        Car(String model, String model) { }
    }

     

     

    생성자가 오버 로딩되어있는 경우 -> new 연산자로 생성자를 호출할 때 제공되는 매개 값의 타입과 수에 따라 실행될 생성자를 결정.

     

     

    다른 생성자 호출

    생성자 오버 로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있음.

    # 6.8 메서드 선언과 호출

    메소드 선언 : 객체의 동작을 실행 블록으로 정의하는 것을 말함.

    메소드 호출 : 실행 블록을 실제로 실행하는 것을 말함.

    리턴타입 메소드명 (매개변수, ...) {
    
    	// 실행할 코드 작성
        
    }

    리턴 타입 : 메서드가 실행한 후 호출한 곳으로 전달하는 결괏값의 타입. 리턴 값이 없는 메서드는 void로 작성.

    리턴 타입이 있는 메소드는 실행 블록 안에서 return 문으로 리턴 값을 반드시 지정해야 한다.

     

    메서드명 : 메소드 명은 첫 문자는 소문자. 카멜 케이스 사용.

    매개변수 : 메서드를 호출할 때 전달한 매개 값을 받기 위해 사용

     

     

    package ch06.sec08.exam01 {
    
    public class CalculatorExample {
    	public static void main(String[] args) {
        	//Calculator 객체 생성
            Calculator myCalc = new Calculator();
            
            //리턴값이 없는 powerOn 메소드 호출
            myCalc.powerOn();
            
            // plus 메소드 호출시 5,6을 매개값으로 제공
            // 덧셈 결과를 리턴 받아 result1	변수에 대입
    		int result1 = myCalc.plus(5,6)
            System.out.println("result1 : " + result1)
            
            int x = 10;
            int y = 4;
            
            //divide() 메소드 호출시 변수 x, y를 매개 값으로 제공
            //나눗셈 결과를 return 받아 result2 변수에 대입
            
            double result2 = myCalc.divide(x,y);
            System.out.println("result2 : " + result2)
            
            //리턴값이 없는 powerOff() 메소드 호출
            myCalc.powerOff();
        }
    }

     

     

    가변 길이 매개변수

    메서드를 호출할 때는 매개변수의 개수에 맞게 매개 값을 제공해야 함.

    만약 메서드가 가변길이 매개변수를 가지고 있다면 매개변수 길이와 상관없이 매개값을 줄 수 있음.

     

     

    return 문

    return 문은 메소드 실행을 강제 종료하고 실행한 곳으로 돌아간다는 의미.

    메서드 선언에 리턴 타입이 있는 경우 return 문 뒤에 리턴값을 추가로 지정해야 함.

     

    메소드 오버 로딩

    메서드 이름은 같지만 

    매개변수의 타입, 개수, 순서가 다른 메서드를 여러개 선언하는 것. (리턴 타입은 무관)

     

    메소드 오버 로딩은 다양한 매개 값을 처리하기 위함

     

    int plus(int x, int y) {
    	result = x + y
        return result
    }
    
    double plut(double x, doubld y) {
    	result = x + y
        return result
    }

     

     

     

    # 6.9 인스턴스 멤버

    필드와 메서드는 선언 방법에 따라 인스턴스 멤버와 정적 멤버로 분류 가능.

    인스턴스 멤버 : 객체에 소속된 멤버 -> 객체 생성 후 사용 가능

    정적 멤버 : 클래스에 고정된 멤버 -> 객체 생성 없이도 사용 가능

     

    public class Car {
    	//인스턴스 필드 선언
        int gas;
        
        //인스턴스 메소드 선언
        void setSpeed(int speed) { ... }
    }

    gas 필드와 setSpeed() 메소드는 인스턴스 멤버이기 때문에

    외부 클래스에서 사용하려면 Car 객체를 먼저 생성하고 -> 참조 변수로 접근해서 사용.

     

    Car myCar = new Car();
    myCar.gas = 10;
    myCar.setSpeed(60);
    
    Car yourCar = new Car();
    yourCar.gas = 20;
    yourCar.setSpeed(80);

    gas 필드는 객체마다 존재

    setSpeed() 메서드는 메소드 영역에 저장되고 공유됨.

     

     

     

     

     

     

    this 키워드

    객체 내부에서는 인스턴스 멤버에 접근하기 위해 this 사용할 수 있음.

    // Car.java
    
    package ch06.sec09;
    
    public claass Car {
    	// 필드 선언
    	String model;
        int speed;
        
        //생성자 선언
        Car(String model) {
        	this.model = model;
        }
        
        //메소드 선언
        void setSpeed(int speed) {
        	this.speed = speed;
        }
        
        void run() {
        	this.setSpeed = 100;
        	system.out.println(this.model, this.speed)
        }
    //carExample.java
    
    package ch06.sec09;
    
    public class carExample {
    	public static void main(String[] args) {
        	Car myCar = new Car("포르쉐");
            Car yourCar = new Car("현대차");
            
            myCar.run();
            yourCar.run();
    	}
    }
    
    
    
    //포르쉐 100
    //현대차 100

    'JAVA' 카테고리의 다른 글

    이것이 자바다 3장  (0) 2022.11.27
    이것이 자바다 2장  (0) 2022.11.27
    이것이 자바다 1장  (0) 2022.11.27
Designed by Tistory.