메소드는 크게 리턴값이 존재하는 메소드와 그렇지 않은 메소드로 나눌 수 있다. 리턴값이 존재한다는 것은 메소드가 실행되고 난 후 반환할 값이 존재한다는 것이고 리턴값이 존재하지 않는 것은 메소드가 실행되고 반환할 값이 없다는 것을 의미한다. 이때 리턴 타입이 void가 아니지만 return문이 없다면 오류가 발생하게 된다. 

 

 메소드에서는 return문을 실행하면 그 즉시 메소드가 종료된다. 따라서 return문 이후에 코드를 작성하게 되면 'Unreachable Code'라는 문구와 함께 오류가 발생하는 것을 볼 수 있다. 말 그대로 도달할 수 없는 코드라는 뜻이다. 하지만 조건문과 같이 특수한 상황에는 return문 뒤에 있어도 코드가 실행될 수 있다. 꼭 return문 뒤에 작성할 수 없다는 뜻은 아니다. 

 

 이런 return문은 메소드 내에서 여러개가 쓰여도 된다. 

public int returnNumber(int a){
	if(a==1){
    	return 1;
    } else {
    	return 0;
    }
}

 위의 코드를 살펴보면 매개 변수로 들어온 a가 1일 경우 1을 반환하고 아니면 0을 반환하는 구조이다. 이처럼 2개가 와도 되고 그 이상으로 있어도 된다.

 

 메소드의 리턴 타입 중 void라는 녀석이 있다. 이 녀석은 값을 반환하지 않겠다는 의미인데 이 녀석을 반복문과 같이 사용할 때 주의해야 한다. 만약 리턴 타입을 void라고 작성한 후 안에 while문을 같이 썼다면 while문은 끝내는 조건이 없을 경우 잘못하면 무한루프 상태에 빠지게 된다. 따라서 이러한 경우에는 꼭 반복문을 끝낼 수 있는 break문을 사용하거나 return ;을 통해 아무런 값도 반환하지 않고 메소드를 종료해야 한다.

'프로그래밍 > JAVA' 카테고리의 다른 글

메소드 - Method  (0) 2021.04.30
생성자 오버로딩(Overloading)  (0) 2021.04.30
this  (0) 2021.04.30
생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29

 메소드는 이전에 객체에서 동작을 담당하는 구역이라고 말한 바 있다. 메소드는 크게 리턴 타입, 이름, 매개 변수, 중괄호로 이루어져 있다. 객체를 생성한 후 실행 클래스에서 해당 객체의 메소드를 실행하게 되면 그 이름에 맞는 메소드는 중괄호 내의 모든 코드를 실행한다. 메소드는 주로 객체 내의 데이터 값을 수정하고 필드를 초기화하는 등의 역할을 하지만 또 다른 객체를 생성하기도 하고 객체 간의 데이터를 주고받기도 하는 등의 다양한 동작을 행한다.

 

 그럼 메소드 선언부 중 리턴 타입에 대해 알아보겠다. 리턴 타입은 말 그대로 메소드가 실행되고 리턴되는 데이터의 타입을 의미한다. 만약 int형으로 반환하겠다 하면 int형으로 선언하면 되고 String형은 String으로 선언하면 된다. 이때 메소드를 void로 선언하게 될 경우 리턴 값이 없다는 것을 의미한다. 메소드에서는 리턴되는 값이 있냐 없냐에 따라 실행 클래스에서 메소드를 실행하는 방식도 달라지게 된다.

public void printString(){
	System.out.println("12345");
}

public int returnNumber(){
	return 1;
}

 위처럼 2개의 메소드가 있다고 가정했을 때 위의 printString메소드는 단순히 '12345'를 출력하고 종료된다. 하지만 아래의 returnNumber메소드는 1을 반환하므로 이 1이 저장될 변수가 필요하다. 때문에 실행시에는 아래와 같이 해야한다.

printString();
int number=returnNumber();

 이때 주의할 점은 Return_number메소드의 리턴 타입과 결괏값을 저장할 변수의 자료형이 같아야 한다는 것이다. 만약 다를 경우에는 자료형을 맞춰서 저장해주어야 오류가 발생하지 않는다.

 

 다음으로 메소드 선언부 중에서 메소드 이름 부분에 대해 알아보겠다. 이 부분은 크게 볼 것이 없어서 간단히 넘어가겠다. 아래는 메소드 이름을 지을 때 주의해야 할 몇가지 규칙이다.

 

 - 숫자로 시작할 수 없고, $,_를 제외한 특수문자를 사용할 수 없다.

 - 관례적으로 메소드 이름은 소문자로 작성한다.

 - 서로 다른 단어가 이어진 메소드 이름일 경우 뒤의 오는 단어의 첫글자는 대문자로 작성한다.

 

 마지막으로 매개 변수 부분에 대해서 알아보도록 하겠다. 매개 변수가 존재하는 이유는 메소드를 실행할 때 메소드 내에서 필요한 데이터를 외부로부터 전달받기 위해 존재한다.

public int plusValue(int a, int b){
	return a+b;
}

 위의 메소드는 간단하게 매개 변수로 들어온 a와 b를 더해서 반환하는 구조로 되어있다. 이를 실행하기 위해서는 매개 변수 값으로 2개의 값을 전달해야 하지만 만약 1개만 전달하거나 전달하지 않을 경우 오류가 발생하게 된다. 또 int값이 아닌 다른 값(float이나 double)과 같은 값을 넘겨주게 되면 오류가 발생한다.

 

 그러면 전체적으로 클래스 내부에서의 구조와 이를 실행하려면 어떤 식으로 해야하는지 알아보겠다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(String name, int age, int height){
    	this.name=name;
        this.age=age;
        this.height=height;
    }
    
    public String returnName(){			// 이름을 반환하는 메소드
    	return name;
    }
    
    public void modifyAge(int age){		// 나이를 수정하는 메소드
    	this.age=age;
    }
}

 위의 코드는 클래스이고 아래의 코드는 실행 클래스에서의 객체 생성과 메소드 실행 방법이다.

Person p1=new Person("Kim", 22, 180);
String name=p1.returnName();
p1.modifyAge(20);

 위의 코드처럼 실행하게 되면 처음에 설정한 name을 반환받게 되고 age 필드는 처음에 22로 설정되었다가 후에 20으로 수정된다.

'프로그래밍 > JAVA' 카테고리의 다른 글

return문  (0) 2021.04.30
생성자 오버로딩(Overloading)  (0) 2021.04.30
this  (0) 2021.04.30
생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29

 이전 포스팅에서 생성자는 하나 이상 작성할 수도 있다고 얘기했었다. 그렇다면 이번에는 여러 개를 사용하려면 어떻게 해야 하는지에 대해 알아보도록 하겠다. 우선 파파고에 overloading을 검색해본 결과 '과적'이라고 나온다. 어찌보면 여러 개가 쌓여 있는 모습이 그렇게 보일수도 있겠다. 그러면 잡소리는 치우고 바로 본론으로 들어가겠다. 아래의 예시를 살펴보겠다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(){ // 1
    }
    
    Person(String name){ // 2
    	this.name=name;
    }
    
    Person(String name, int age){ // 3
    	this.name=name;
        this.age=age;
    }
    
    Person(String name, int age, int height){ // 4
    	this.name=name;
        this.age=age;
        this.height=height;
    }
}

 이 코드를 보면 지금까지 보던 코드와는 약간 다르다. 같은 이름의 생성자가 여러 개 있는 것을 확인할 수 있다. 이것이 생성자 오버로딩이다. 그럼 코드를 세세히 살펴보겠다. 우선 1번 생성자부터 확인을 해보겠다.

 

 1번 생성자는 생성자 안에 아무 내용도 없다. 이는 생성자를 선언하지 않고 실행했을 때 컴파일러가 자동으로 추가하는 기본 생성자와 같다. 이렇게 되면 객체 생성 시에는 아무런 값도 초기화되지 않는다.

 

 2번 생성자는 매개 변수로 name만 주어졌다. 이후 안에서는 객체 내의 name 필드를 초기화하고 있다. 그리고 다른 필드 age와 height;는 초기화하지 않고 있다.

 

 3번 생성자는 위와 같은 방식으로 name과 age만 초기화한다.

 

 4번 생성자는 클래스 내의 모든 필드를 초기화하고 있다

 

 이처럼 생성자 오버로딩은 자신이 원하는 값만 초기화하고자 할 때 사용할 수 있다. 그런데 위에서 보면 코드가 중복되는 줄이 너무 많고 좀 복잡해보인다. 이럴 때 사용하는 것이 this() 메소드이다. 이 메소드는 같은 클래스 내의 다른 생성자를 호출할 때 사용된다. 쉽게 말하면 지금 속해있는 생성자 안에서 같은 매개 변수를 갖고 있는 형식의 생성자를 호출한다는 말과 같다. 그러면 아래의 수정된 코드를 살펴보겠다.

※ 이때 주의해야 할 점은 this() 메소드는 반드시 생성자의 첫줄에서만 허용된다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(){
    }
    
    Person(String name){
    	this.name=name;
    }
    
    Person(String name, int age){
    	this(name);
        this.age=age;
    }
    
    Person(String name, int age, int height){
    	this(name,age);
        this.height=height;
    }
}

 위의 코드를 보면 훨씬 간결하고 중복되는 내용도 줄어든 것을 확인할 수 있다. 그러면 이렇게 클래스를 생성하고 어떻게 객체를 생성하는지에 대해 알아보도록 하겠다.

Person me=new Person();
Person friend1=new Person("Park");
Person friend2=new Person("Kim", 20);
Person friend3=new Person("Choi", 22, 180);

 위처럼 나를 포함한 친구들을 생성해 보았다. 위처럼 생성을 하면 나는 아무런 정보도 초기화되지 않았고 내려갈수록 한개씩 초기화돼서 마지막 친구의 객체의 name은 'Choi', age는 22, height는 180으로 초기화된 것을 확인할 수 있다.

'프로그래밍 > JAVA' 카테고리의 다른 글

return문  (0) 2021.04.30
메소드 - Method  (0) 2021.04.30
this  (0) 2021.04.30
생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29

 자바에서는 this라는 키워드를 제공한다. this는 말 그대로 '이것'을 의미한다. 이를 자바에서 보면 객체 자신을 가리킬 때 사용한다. 예를 들어 아래의 예시를 살펴보겠다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(String n, int num, int h){
    	name=n;
        age=num;
        height=h;
    }
}

 위의 예시에서는 생성자에서 매개 변수로 각각 n, num, h를 썼다. 하지만 이렇게 쓰게 되면 오히려 가독성이 떨어지고 각 변수가 어떤 것을 의미하는지 알아보기 힘들수도 있다. 따라서 매개 변수와 필드의 이름을 같은 것을 사용해주면 좋지만 이름이 같으면 매개 변수가 사용 우선순위가 높은 까닭에 생성자 내부에서 해당 필드로 접근할 수가 없다. 이럴 때 사용하는 것이 'this'키워드이다. 사용방법은 간단하다. 객체 자신의 필드를 카리키는 이름 앞에 'this.'를 붙여주면 된다. 그러면 수정된 아래의 코드를 살펴보겠다.

public class Person {
	String name;
    int age;
    int height;
    
    Person(String name, int age, int height){
    	this.name=name;
        this.age=age;
        this.height=height;
    }
}

 수정된 코드는 위와 같다. 위가 훨씬 알아보기도 편하고 간결한 것을 알 수 있다.

'프로그래밍 > JAVA' 카테고리의 다른 글

메소드 - Method  (0) 2021.04.30
생성자 오버로딩(Overloading)  (0) 2021.04.30
생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29
객체 생성 & 클래스 변수  (0) 2021.04.29

 생성자(Constructor)는 클래스에서 new 연산자로 객체를 생성할 때 객체의 초기화를 담당하는 부분이다. 객체의 초기화라고 하면 클래스 안에 있는 필드값을 초기화하거나, 클래스 내의 메소드들을 호출해서 사용 가능한 준비 상태로 만드는 것을 말한다. 이 클래스의 생성자를 호출하지 않고는 객체를 생성하지 못한다. static이라는 예외가 있긴 하지만 static은 추후에 알아보도록 하겠다.

 

 모든 클래스에는 반드시 생성자가 하나 이상 있어야 한다. 만약 클래스에서 생성자 선언을 건너뛰었다면 컴파일러는 클래스 내부에 아무 내용도 없는 기본 생성자를 자동으로 추가한다. 따라서 생성자가 없다면 안에 아무 내용도 없는 기본 생성자가 호출된다고 보면 된다.

 

 생성자는 메소드와 비슷하게 생겼으나 리턴 타입이 없고, 클래스의 이름과 동일하다. 하지만 메소드와 비슷한 점으로는 생성자도 매개 변수를 받을 수 있다는 것인데 여러 개의 매개 변수를 받을 수도 있다. 단, 이때는 객체를 생성할 때 new 연산자를 통해 해당 생성자의 매개변수와 맞는 구조를 입력해주어야 한다. 아래의 예시를 보겠다.

public class Person {
	//
    Person(String name, int age){
    	//
    }
}

 위와 같은 클래스(중간에 불필요한 내용은 생략했다고 치겠다)가 있다고 가정했을 때 객체를 생성하려면

- Perseon me=new Person("Kim", 25); 이런식으로 구조에 맞는 매개 변수를 입력해주어야 한다.

 

 이전에 생성자의 역할에는 필드의 초기화도 있다고 얘기 했었다. 그렇다면 이게 정확히 무엇을 의미하는지 알아보겠다. 우선 아래의 예시와 같은 코드가 있다고 하겠다.

public class Person {
	String name,
    int age,
    int height;
    
    Person(String n, int num, int h){
    	name=n;
        age=num;
        height=h;
    }
}

 위의 코드를 살펴보면 클래스의 이름은 Person이고 필드로는 String 형의 name이 있다. int형으로는 age, height가 있다. 만약 위의 클래스에서 생성자가 매개 변수가 없는 단순 생성자였으면 이 필드들은 각각 null값과 0으로 초기화 될 것이다. 하지만 생성자에 매개 변수를 부여함으로써 매개 변수로 입력받은 n을 name, num은 age, h를 height에 대입하라는 내용이 된다. 따라서 객체를 생성할 때는 아래와 같이 생성하면 된다.

Person me=new Person("Kim", 22, 180);

'프로그래밍 > JAVA' 카테고리의 다른 글

생성자 오버로딩(Overloading)  (0) 2021.04.30
this  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29
객체 생성 & 클래스 변수  (0) 2021.04.29
클래스 선언  (0) 2021.04.29

 클래스는 단순히 생성하기만 했다고 해서 모든 것이 끝나는 것은 아니다. 설계도 종이가 있다고 생산에 들어갈 수 있는 게 아닌 것처럼 클래스 안에도 필요한 것들을 적어넣어야 한다. 클래스는 크게 3가지 구성요소를 가지고 있다.

 

 - 생성자(Constructor) : 객체를 생성할 때 초기화되는 항목들을 관리

 - 필드(Field) : 객체의 데이터가 저장되는 곳

 - 메소드(Method) : 객체의 동작 및 데이터의 조작이 이루어지는 곳 (C 언어의 함수)

 

1. 필드

 필드는 객체의 데이터, 메소드의 반환값, 상태 등등을 저장하는 곳이다. 선언 형태는 변수와 비슷하지만 변수와는 약간의 차이가 있다. 변수는 생성자와 메소드 내에서만 사용돼 생성자와 메소드가 종료되면 같이 소멸되지만 필드는 소멸되지 않고 객체가 소멸되면 같이 소멸된다. 필드는 아래와 같이 생겼다

ex) String name="Kim";

     int number=1;

     float value=0.15f;

 

2. 생성자

 생성자는 객체를 생성할 때 new연산자를 사용하면 호출되는 부분이다. 말 그대로 객체가 생성될 때 필드를 초기화 시키고 클래스 안에 있는 메소드들을 호출해 준비를 한다. 생성자는 메소드와 굉장히 비슷하게 생겼는데 클래스 이름과 동일하고 리턴 타입이 없다. 생성자는 아래와 같이 생겼다.

ex) 클래스의 이름이 Person이라고 가정했을 때 -> Person(){ }

 

3. 메소드

 메소드는 C언어에서의 함수와 비슷한 역할을 한다. {}로 이루어져 있으며 호출되면 중괄호 안의 모든 내용들이 순차적으로 실행된다. 메소드는 작성하는 방법에 따라서 단순히 값만 계산할 수도 있고 또 다른 메소드를 호출해서 결과값을 가지고 다른 곳에 반환할 수도 있다.

ex) public int Value_number(int a){ // 실행 코드 }

'프로그래밍 > JAVA' 카테고리의 다른 글

this  (0) 2021.04.30
생성자  (0) 2021.04.30
객체 생성 & 클래스 변수  (0) 2021.04.29
클래스 선언  (0) 2021.04.29
Class - Field  (0) 2021.03.16

 지난 포스팅에서 클래스를 생성하는 방법에 대해서 알아보았다. 클래스를 선언하고 컴파일을 완료했다면 이는 공장에서 설계도가 준비되어 생산준비에 들어간 것과 같다고 할 수 있다. 이제 이 클래스를 사용하기만 하면 되는데 이때 new연산자를 통해 클래스를 인스턴스화(클래스를 통해 객체를 생성하는 것을 '인스턴스화'라고 한다) 하게 된다.

Person me=new Person();

 만약 Person이라는 클래스가 있다면 위와 같이 생성할 수 있다. 이때 사용한 것이 new 연산자이고 뒤의 Person(); 부분이 Person클래스를 ()를 통해 생성자를 호출한다는 뜻이라고 할 수 있다.

 

 new 연산자를 통해서 객체를 생성하게 되면 객체는 메모리 힙(heap) 영역에 생성되게 된다. new 연산자는 이 영역에 객체를 생성한 후에 객체의 주소를 리턴한다.

 

 클래스는 크게 2가지 용도로 나눌 수 있다. 하나는 라이브러리(API : Application Program Interface)용도이고 다른 하나는 실행용이다. 라이브러리는 말 그대로 도서관처럼 필요한 것을 가져다가 실행용 클래스에서 사용하는 목적으로 생성되는 클래스를 말한다. 이때 실행용 클래스는 단 하나밖에 존재하지 않아서 클래스가 무수히 많더라도 실행클래스는 1개라고 할 수 있다. 우리가 프로그램을 실행할 때 main함수가 들어있는 클래스가 실행용 클래스이다.

'프로그래밍 > JAVA' 카테고리의 다른 글

생성자  (0) 2021.04.30
클래스의 구성 요소  (0) 2021.04.29
클래스 선언  (0) 2021.04.29
Class - Field  (0) 2021.03.16
객체 지향 프로그래밍  (0) 2021.03.16

 지난 포스팅에서 클래스란 설계도면과 같다고 얘기했다. 그렇다면 이제 이 클래스를 어떻게 만들고 써먹는지에 대해 알아보도록 하겠다. 정말 간단하게 생성할 수 있지만 몇가지 규칙이 있다.

 

 - 하나 이상의 문자로 이루어져야 함

 - 첫 글자는 숫자 불가능

 - '$','_' 외의 특수 문자는 사용 불가능

 - 자바에서 지정한 키워드는 사용 불가능 (예: int, for 등등)

 

 위 규칙만 지킨다면 생성에 문제가 될 것은 없다. 하지만 보통 클래스 이름을 지을 때 첫글자는 대문자로 작성하는 것이 관례이다. 이름을 지었다면 클래스 파일을 생성해야 한다. 이때 소스 파일의 이름은 클래스 이름과 반드시 동일해야 한다. 만약 한 자라도 틀린다면 오류가 발생하게 된다. 소스 파일의 이름은 "클래스이름.java"와 같이 생성한다. 소스 파일을 생성했다면 열고 다음과 같이 선언을 해주어야 한다.

 

public class 클래스이름 {

}

 위 예시에서 앞에 public 접근 제한자를 붙여 주었는데 이때 다른 제한자를 사용하게 되면 오류가 발생하게 된다.

보통은 하나의 소스 파일에 하나의 클래스를 선언하지만 2개 이상의 클래스를 선언해도 무관하다. 하지만 여기서 접근제한자 public 을 2개의 클래스 모두에 붙여주게 되면 또 오류가 발생하게 된다. public은 소스 파일의 이름과 같은 클래스에만 사용할 수 있다.

 

 위처럼 클래스 파일을 작성한 후 컴파일을 하게 되면 .class 파일이 생성이 되는데 이는 소스 파일의 개수와 상관없이 내부에 선언된 클래스의 개수만큼 생성이 된다.

'프로그래밍 > JAVA' 카테고리의 다른 글

클래스의 구성 요소  (0) 2021.04.29
객체 생성 & 클래스 변수  (0) 2021.04.29
Class - Field  (0) 2021.03.16
객체 지향 프로그래밍  (0) 2021.03.16
자바 배열  (0) 2019.04.25

 필드 선언

 이번에는 클래스의 구성요소 중 필드에 대해서 알아보도록 하겠습니다. 필드란 쉽게 말해서 객체의 속성을 정의하는 공간이라고 할 수 있습니다. 예를 들어 휴대폰을 객체로 가정한다면 고유한 값을 가지는 제조사, 크기, 모델이름 등등이 고유 데이터에 해당하고 배터리 상태, 통신사 등등은 상태 데이터에 해당한다고 할 수 있습니다. 그리고 휴대폰에 블루투스로 이어폰, 워치 등등이 추가된다면 이는 휴대폰과 다른 객체이므로 다른 클래스가 선언 되어야 합니다. 위의 속성들을 클래스에 필드로 선언한다면 아래와 같이 될 수 있습니다.

public class Phone {
	String maker;
    int display_size;
    String model_number;
    
    int battery;
    String carrier;
    
    Earphone earphone;
    Watch watch;
}

 필드를 선언하는 위치는 어디가 되든 상관없습니다. 하지만 생성자와 메소드 중괄호 내부의 블록에는 선언될 수 없습니다. 만약 이들 중 한곳에 선언했다면 그것은 필드가 아닌 로컬 변수가 돼버립니다. 필드 선언 방법은 변수의 선언 방법과 같다고 볼 수 있습니다. 만약 초기값이 주어지지 않으면 객체 생성 시에 자동으로 초기화가 진행됩니다.

 

 필드 사용

 필드를 사용한다는 것은 필드값을 읽고, 변경하는 행위를 말합니다. 클래스 내부에서 생성자나 메소드가 필드를 사용할 경우 변수를 사용하듯이 사용하면 되지만 클래스 외부에서 사용할 경우에는 우선 해당 클래스로부터 객체를 생성한 뒤 필드에 접근해야 합니다. 그 이유는 해당 객체가 존재하지 않으면 필드 또한 존재하지 않기 때문입니다.

 

 클래스 외부에서 해당 객체의 필드에 접근하려고 할 때에는 도트(.)를 이용해서 접근할 수 있습니다. 아래의 예시에서 살펴보도록 하겠습니다.

 

-Person 클래스

void method(){
	Phone myPhone=new Phone();
    myPhone.battery=75;
}

-Phone 클래스

int battery;

Phone(){
	battery=0;
}

void method(){
	battery=50;
}

 위의 예시에서는 클래스 내부에서는 변수처럼 사용할 수 있지만 클래스의 외부에서는 도트(.) 연산자를 통해 접근하는 것을 확인할 수 있습니다.

'프로그래밍 > JAVA' 카테고리의 다른 글

객체 생성 & 클래스 변수  (0) 2021.04.29
클래스 선언  (0) 2021.04.29
객체 지향 프로그래밍  (0) 2021.03.16
자바 배열  (0) 2019.04.25
자바 메서드 - 문제  (0) 2019.04.22

 자바는 객체지향 프로그래밍언어입니다. 말 그대로 '객체를 지향하는 프로그래밍을 하는 언어'라는 뜻입니다. 그렇다면 객체의 개념에 대해서 알아보겠습니다.

 

 객체란 쉽게 말해서 실체의 유무와 상관없이 고유한 속성을 가지고 다른 것과 구별가능한 것을 말합니다. 예를 들어 종이로 돼있고 글이 적혀있는 속성을 갖고 있는 책, 사칙연산이 가능한 계산기 등등이 모두 객체가 될 수 있습니다. 이런 객체들을 살펴보면 크게 속성과 동작으로 구성되어 있는 것을 알 수 있습니다. 앞서 말한 계산기의 경우 속성으로는 숫자패드와 계산버튼들이 있고 동작으로는 계산 기능을 갖고있다고 할 수 있습니다. 이때 자바에서는 이 객체의 속성을 필드(field)라고 하고 동작들을 메소드(method)라고 부릅니다.

 

 객체에 대해서 알아보았고 그럼 객체지향 프로그래밍의 특성에는 어떤 것이 있는지 알아보도록 하겠습니다.

 

 - 캡슐화 (Encapsulation)

  객체의 필드와 메소드를 하나로 묶어 외부에 노출되지 않도록 하는 특성입니다. 해당 객체가 아닌 외부 객체는 해당 객체의 내부 구조를 알 수가 없고 해당 객체에서 제공하는 정보만 알 수 있습니다.

 

 이처럼 필드와 메소드를 캡슐화하여 보호하는 이유로는 외부에서 잘못 접근하여 객체에 오류를 일으킬 수도 있기 때문입니다. 예시로 우리는 중요한 물건이 있으면 외부에 노출되지 않도록 숨기고는 합니다. 캡슐화의 이유는 이러한 이유와 같다고 볼 수 있습니다.

 

 - 상속 (Inheritance)

 상속이란 모두가 흔히 알다시피 자식이 부모에게서 재산을 물려받는 것을 말합니다. 객체 지향 프로그래밍에서도 객체끼리 상속이 가능합니다. 부모 객체는 자신이 갖고 있던 필드, 메소드들을 자식 객체에게 넘겨줍니다. 이렇게 되면 자식 객체는 상속받은 필드, 메소드들을 모두 사용할 수 있게 됩니다.

 

 상속은 부모 객체를 재사용해서 자식 객체를 간단하게 작성할 수 있도록 도와주고, 이미 완성된 객체를 재사용해서 새로운 객체를 만들기 때문에 코드의 중복을 줄여준다는 장점이 있습니다. 또한 수정사항이 있을 경우에 부모 객체를 수정하면 자식 객체들은 건드리지 않아도 되기 때문에 유지보수의 시간을 줄여준다는 장점도 있습니다.

 

 - 다형성 (Polymorphism)

 다형성이란 하나의 타입(type)으로 여러 객체를 대입해 다양한 기능을 이용할 수 있도록 하는 특성입니다. 자바에서는 다형성을 위해 부모 클래스, 인터페이스에서의 타입 변환을 허용합니다. 부모 클래스에서는 모든 자식 객체가 대입될 수 있고 인터페이스에서는 모든 구현 객체가 대입될 수 있습니다. 인터페이스는 아직 공부하지 않았으므로 추후에 언급하도록 하겠습니다.

'프로그래밍 > JAVA' 카테고리의 다른 글

클래스 선언  (0) 2021.04.29
Class - Field  (0) 2021.03.16
자바 배열  (0) 2019.04.25
자바 메서드 - 문제  (0) 2019.04.22
자바 메서드 ( method )  (0) 2019.04.21

+ Recent posts