본문 바로가기

프로그래밍 언어/Java

Week3) Java Programming Lab : Class and Instance

Java-Lecture3.pdf
0.70MB

1. Introduction to Class

class

  • 프로그래머가 정의하는 특별한 타입
  • 변수가 클래스 타입으로 선언될 수 있다. 
  • 클래스는 해당 타입의 객체가 가지고 있는 데이터와 수행할 함수를 결정한다.
  • 클래스 타입의 값 = object  (객체), instance (인스턴스) 
  • example
class Ball: 
	fields : color, size, shape
    methods : set_ball_color(), set_ball_size(), set_ball_shape()

// instances of the class Ball : football, tennis ball, rugby ball etc...

methods 들은 fields의 데이터 값들을 변경하는 역할을 한다. 

클래스는 데이터 값을 변경하여 다양한 인스턴스 (클래스 객체)를 만들 수 있다. 

클래스로 데이터와 메소드들을 묶어주면 재사용이 쉽다. 

 

2. Primitive Type Values vs. Class Type Values

primitive type values 

  • int, float, char, ... 일반적인 데이터 타입 
  • 하나의 데이터 타입을 나타냄

class type values

  • 여러 개의 데이터 타입을 가진다.
  • 메소드 (액션)을 여러개 가진다.
  • 하나의 클래스의 모든 객체들은 같은 데이터와 메소드를 갖는다.
  • 각 객체들은 서로 다른 값을 갖는 데이터를 가질 수 있다. 

example

public class Ball {
	String color;
    float size;
    String shape;
    // 모든 Ball 객체는 위 변수 3개를 갖는다. (값을 달라도 됨)
    
    void Set_Ball_Color(String BallColor) {
    	color = BallColor;
    }
    void Set_Ball_Size(float BallSize) {
    	size = BallSize;
    }
    vois Set_Ball_Shape(String BallShape) {
    	shape = BallShape;
    }   
}
public class Program {
	public static void main(String[] args) {
    	
    	Ball football = new Ball(); // 초기화
        // bad way to use class objects 
        football.color="blue";
        football.shape="circle";
        football.size=15.2f;
        // good way to use class objects 
        football.Set_Ball_Color("black");
        football.Set_Ball_Shape("rectangle");
        
        
        Ball tennisball = new Ball(); 
        
        tennisball.color="yellow";
        tennisball.shape="circle";
        tennisball.size=9.12f;
    }
}

Contents of a class definition

  • fields, 인스턴스 변수
  • methods 
  • members = fields + methods
// 클래스 타입 선언
ClassName classVar;
// 클래스 객체 생성
classVar = new ClassName();
// ex)
Ball football;
football = new Ball();

// 한번에 선언 및 객체 생성 가능
ClassName classVar = new ClassName();
//ex)
Ball football = new Ball();

3. Instance Variables and Methods

  • 인스턴스 변수가 public (default)면 외부 객체에서 직접 변경 가능
  • private이라면 외부 객체에서 변경 불가능 

4. Class Constructor

  • 객체의 인스턴스 변수를 초기화하기 위해 설계된 특별한 메소드 = constructor
public ClassName (params) { ... }
  • 클래스와 같은 이름을 가지고 있어야 함
  • 리턴 타입이 없음 (not even void) 
  • 반드시 public 
  • 메소드 오버로딩됨
  • 없으면 자바 컴파일러가 자동으로 constructor 만들어서 객체 변수 초기화 수행 
  • 하나의 클래스에 여러개의 구성자 함수 만들 수 있음
public class Ball {
	String color;
    float size;
    String shape;
    // 모든 Ball 객체는 위 변수 3개를 갖는다. (값을 달라도 됨)
    
    //constructor
    public Ball() {
    	color = "white";
        size = 0;
        shape = "None";
    }
    
    void Set_Ball_Color(String BallColor) {
    	color = BallColor;
    }
    void Set_Ball_Size(float BallSize) {
    	size = BallSize;
    }
    vois Set_Ball_Shape(String BallShape) {
    	shape = BallShape;
    }   
}
public class Program {
	public static void main(String[] args) {
    	Ball football = new Ball();
        
        System.out.println(football.color);
        
        // white
    }
}

or

public class Ball {
	String color;
    float size;
    String shape;
    
    //constructor
    public Ball(String c, float s, String sh) {
    	color = c;
        size = s;
        shape = sh;
    }
    
    void Set_Ball_Color(String BallColor) {
    	color = BallColor;
    }
    void Set_Ball_Size(float BallSize) {
    	size = BallSize;
    }
    vois Set_Ball_Shape(String BallShape) {
    	shape = BallShape;
    }   
}
public class Program {
	public static void main(String[] args) {
    	Ball football = new Ball("Black", 10.5f, "circle");
        
        System.out.println(football.color);
        
        // Black
    }
}

5. Full Java Example

6. Common Class differences between C++ and Java

class

  • 변수
  • 메소드 
  • => 인스턴스화 

Java C++
선언과 동시에 인스턴스 변수 초기화  반드시 constructor를 활용해서 초기화 가능
  직접 할당 X
클래스 선언 끝에 ; 불필요 클래스 선언 끝에 ; 필요
클래스 객체 선언 heap 방식 heap 방식, stack 방식 
디폴트가 public 디폴트가 private
포인터 X 포인터 O
final : 클래스 데이터 일부만 바꾸기 가능, 전체 변경 X  

 

 

 


References

  • 성균관대학교 소프트웨어학과 타메르 교수님 <자바 프로그래밍 실습> 수업
  • 2021.03.09