[edx] 클래스와 객체

Hyeon Soo·2022년 5월 6일
0

1. 개요

  • 객체지향은 클래스를 기반으로, 변수와 메서드를 이용하여 프로그래밍을 짜는 일종의 방법론을 의미한다. 이는 방법론이기 때문에, 객체를 이용하지 않고 동일한 동작을 하는 코드를 작성하는 것도 당연히 가능하다.

  • 그렇지만, 객체를 활용한 코드는 그렇지 않은 코드에 비해 여러 이점을 지닌다. 예를 들어 화씨 온도를 섭씨온도로 바꾸어 출력하는 프로그램은 대강 다음과 같이 작성할 수 있다.

public class Ftc{
	public static void main(String[] args){
    	int fdegree;
        fdegree = 50;
        double cdegree = (5.0/9) * (fdegree - 32);
        System.out.println(cdegree);
    }
}
//안 될 수 있음.
public class Degree{
	private double degree;
    private char unit;
    
    public degree(double initdegree, char initunit){
    	degree = initdegree;
        unit = initunit;
    }
    
    public void convert(){
    	char f = "f";
    	if(Character.compare(unit, f)){
        	degree = (5.0/9) * (degree - 32);
            unit = initunit;
        }
    }
    
}
  • 첫번째 코드는 온도 클래스를 따로 선언하지 않았고, 두번째 코드는 대강 클래스를 선언하고, 이를 통해 온도 변환을 수행할 수 있도록 하였다. 다른 Main 파일을 작성하여, 코드를 작성하면 동작할 것이다.

  • 단순한 코드의 경우, 굳이 클래스를 선언하여 프로그래밍을 해야만 하는 것은 아니다. 하지만, 다양한 역할을 수행해야하는 복잡한 코드를 작성하게 될 경우, 첫번째 방식으로 코드를 작성할시, 코드의 어떤 부분이 어떤 역할을 수행하고 있는지 매번 처음부터 끝까지 다 확인해야할 가능성이 높으며, 수정할 경우에도 마찬가지이다. 그러나, 두번째 방식의 경우, 온도와 관련된 동작이나, 변수를 추가하거나 할 경우, 온도 클래스를 바로 확인하여 작성하면 된다.

  • 즉, 객체지향 프로그래밍은 코드의 유지보수, 확장성 등에 있어서 큰 이점을 가진다. 특히 객체의 특성과 성격을 잘 이해하면, 유연성이 높은 코드를 작성할 수 있게된다.

2. 클래스의 구성

//안 될 수 있음.
public class Degree{ //이 괄호 안의 모든 내용은 class member이다.
	//instance variable, 인스턴스 변수
	private double degree;
    private char unit;
    
    //Constructor, 생성자
    public degree(double initdegree, char initunit){
    	degree = initdegree;
        unit = initunit;
    }
    
    //method, 메서드
    public void convert(){
    	char f = "f";
    	if(Character.compare(unit, f)){
        	degree = (5.0/9) * (degree - 32);
            unit = "c";
        }
    }
    
}
  • 개인적으로, 클래스는 데이터를 사람이 생각하는 방식(그것이 현실에 존재하던 안 하던)대로 프로그램상에서 기능할 수 있도록 만든 것이라고 생각한다. 많은 경우 클래스는 빵틀, 문서 서식 등으로, 클래스를 통해 생성한 객체를 붕어빵과 문서 등으로 비유하곤 하는데, 매번 붕어빵의 모양을 빚는 것이 아니라, 가로, 새로, 높이, 문양 등을 생각하는대로 틀을 만들어서, 그 틀대로 빵이 나오도록 하여 사람이 쓰는 것이라고 보면 이해가 된다.

  • 위의 온도 클래스를 예시로 들면, 매우 부정확하고 엉성하긴하지만, 온도가 몇도인지, 기준이 화씨인지, 섭씨인지, 만약 화씨라면 섭씨로 변환할 수 있다. 컴퓨터의 데이터가 일상생활에서 사용하는 온도 개념과 비슷하게 동작한다.

  • 이 글에서는 클래스를 구성하는 class member 중에서 인스턴스 변수, 생성자, 메서드에 대해서 간략히만 다룰 것이며, 모든 설명은 java에 한정되므로 다른 언어에서는 다를 수 있다.

  • 인스턴스 변수는 객체가 표현하고자 하는 개념의 특성을 적어놓은 것으로 이해하고 있다. 예시로 든 붕어빵 틀의 경우, 가로, 새로, 높이, 문양 모양 및 개수 등을 인스턴스 변수라고 할 수 있을 것이다. 인스턴스 변수는 클래스 안의 모든 메서드 바깥에 선언해야하며, 이를 통해 클래스의 메서드들이 변수에 접근하여 수정 및 사용을 할 수 있게 된다.

  • 생성자는 입력받은 parameter를 인스턴스 변수로하여 클래스의 형식을 가진 객체데이터를 생성한다. 아예 생성자를 작성하지 않았다면, default 생성자가 동작한다. 하지만, 생성자를 한번 작성하면, 더 이상 default 생성자로는 생성할 수 없다. 이때, return 타입을 입력할 필요는 없다.

  • 메서드는 클래스 데이터로 수행할 수 있는 행동들을 나타내거나, 객체의 데이터를 수정하는 등의 역할을 수행한다. 이때 전자를 인스턴스 메서드, 후자를 helper 메서드라고 한다.

출처: https://learning.edx.org/course/course-v1:GTx+CS1331xII+2T2021/home

이상의 내용은 edx 플랫폼을 통해 GTx에서 제공하는 Introduction to Object-Oriented Programming with Java 강의의 내용을 개인적으로 정리한 것입니다. 그렇기 때문에, 부정확한 내용 혹은 잘못 이해하고 있는 내용이 있을 수 있으니 양해 부탁드립니다.

0개의 댓글