본문 바로가기

프로그래밍 언어/Java

Week4) Java Programming Lab : Class and Instance (2)

Java-Lecture4.pdf
0.92MB

Class Constructor

  • 모든 클래스는 반드시 하나 이상의 contructor을 가짐
  • 사용자가 클래스 선언시 구성자를 선언하지 않은 경우 자바 컴파일러가 디폴트 구성자를 만듦
  • 초기에 멤버 변수를 초기화
  • 모든 변수를 초기화하지 않은 경우, 초기화되지 않은 값은 디폴트 값으로 자동 설정 

this

  • 모든 객체는 자기 자신을 참조할 때 this 키워드를 사용 

2. constructor, set, get example

public class StuentData {
	private String StudentName;
    private int StudentID;
    private int StudentAge;
    
    // constructor1 - 변수 초기화 
    public StudentData(){
    	StudentName = "None";
        StudentID = 0000;
        StudentAge = 0; 
    }
    
    // constructor2 - this: 현재 클래스 맴버 변수를 의미함
    public StudentData(String StudentName, int StudentID, int StudentAge){
    	this.SetStudentName(StudentName);
        // this.StudentName = StudentName;
        
        this.SetStudentAge(StudentAge);
        // this.StudentAge = StudentAge;
        
        this.StudentID = StudentID;
       
    }
    
    // set function1
    public void SetStudentName(String StudentName) {
    	this.StudentName = StudentName;
    }
    
    // get function1
    public String GetStudentName(){
    	return this.StudentName;
    }
    
    // set function2
    public void SetStudentAge(int StudentAge){
    	if (StudentAge > 0 ) {
        	this.StudentAge = StudentAge;
        }
        else {
        	System.out.println("Error, you cannot assign negative value");
        }
    }
    
    //get function2
    public int GetStudentAge(){
    	return this.StudentAge;
    }
}

toSting() method

  • 객체 인스턴스를 출력하려고 하면 문자 그대로 출력되지 않기 때문에 toString 메소드를 만들어 원하는 형태로 출력될 수 있게 함 
  • 이름이 반드시 toString() 메소드여야 함
...
public String toString(){
	String info = "";
    
    info = info + this.ClassMember + " \n" + this.ClassMemeber + " \n" + ...
    
    return info;
}

 

  • constructor 에서 바로 값을 넣어 초기화하는 것보다 setter 함수를 이용해서 초기화하는 것이 좋은 방법 

3. Class Composition

  • has(one object)-a relationship(multiple classes)
  • 여러 개의 클래스를 하나의 프로그램에 사용하는 것 
  • 클래스 객체를 다른 클래스의 멤버로 선언

Example

// ** ctrl + Shift + f : 코드 라인 정리
public class Engine{ 
	private int capacity;
    private int serialNumber;
}

public getCapacity() {
	return capacity;
}

public void setCapacity(int capacity){
	this.capacity = capacity;
}

public int getSerialNumber(){
	return serialNumber;
}

public void setSerialNumber(int serialNumber){
	this.serialNumber = serialNumber;
}
public class Car {
	private String maker;
    private int year;
    private Engine carEngine;
    
    public Car(String maker, int year, int capacity, int serialNumber){
    	super();
        this.maker = maker;
        this.year = year;
        this.carEngine = new Engine(capacity, serialNumber);
    }
    
    // 상단 메뉴 -> source -> getter, setter 자동 생성 ...
}
public class TestCar{
	public static void main(String[] args){
    	Car ray = new Car("KIA", 2020, 2000, 12312314);
        
        System.out.println(ray.getMaker());
        System.out.println(ray.getYear());
        System.out.println(ray.getCarEngine()); // 객체이므로 toString() 메소드 필요 
    }
}

4. Class static members

  • static 메소드는 non-static 클래스 멤버에 접근할 수 없음 
  • static 메소드는 클래스의 객체가 인스턴스화된 것이 없을 때에도 호출할 수 있음 
  • static 변수는 static 메소드와 non-static 메소드 모두 접근 가능
  • non-static 변수는 static 메소드에서 접근 불가능
public class Student(){
	private String name;
    private int id;
    private static Sring college = ""; // this 키워드로 접근 불가 
    
    public static void setCollege(String College){
    	college = College; 
        // static value는 static 메소드에서만 접근 가능, this 키워드 사용 불가 
        this.id = 1234; // 불가능 - id 는 no-static이기 때문
    }
    
    ..
}

public class TestStudent(){
	public static void main(String[] args) {
    
    	Student std1 = new Student("se", 1234);
        std.setCollege("Computing");
        
        Student std2 = new Student("ke", 2354);
        std.setCollege("English");
        
        System.out.println(std1.getCollege);  // English
    }
}
  • 클래스마다 college(static 변수) 값을 설정할 수 있는게 아니라 전체 클래스에 적용됨 

5. Importing static variables and methods from other class.

import static java.lang.Math.*;

public class StaticImportTest{
	public static void main(String[] args){
    	System.out.println(sqrt(900.0);
    }
}

8. Creating Packages Access Packages

  • package package_name (자바 코드 최상단에)
  • creat package
  • 여러 개의 클래스를 하나의 패키지에 넣음
  • 드래그 해서 넣으면 상단에 package 선언 자동으로 생성됨 in eclipse 
// creat package
// 여러 개의 클래스를 하나의 패키지에 넣음 
// 드래그 해서 넣으면 상단에 package 선언 자동으로 생성됨 in eclipse 

import NameOfPackageName.*;