[스터디]Java의 정석 8일차

Kristopher·2022년 1월 3일
0

Java 스터디

목록 보기
8/31

(CH6) 1. 객체지향언어 ~ 3.6 return문

객체지향의 기본 개념

실제 세상은 객체로 이루어져 있으며 객체들간의 상호작용으로 인해 사건이 발생한다는 것이다. 기존 프로그래밍 언어에 몇가지 규칙을 추가하여 유기적으로 프로그램을 구성하도록 한다. 객체지향언어는 재사용성이 높고, 관리가 용이하며, 신뢰성이 높은 프로그래밍을 가능하게 한다.

클래스와 객체, 인스턴스란 무엇인가?

객체란 실제로 존재하는 사물이나 개념을 의미하며, 클래스는 이러한 객체를 정의해놓은 것이다. 즉, 자동차를 객체라고 생각한다면 클래스는 자동차를 만들기 위한 설계도라고 비유할 수 있다. 객체와 비슷한 개념으로 인스턴스라는 것이 등장하는데, 객체는 모든 인스턴스를 비유하는 포괄적인 의미이며 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 부른다. 객체란 군집의 개념으로 받아들이고 인스턴스는 군집에 해당하는 각각의 개체로 이해하였다.

속성과 기능

객체는 속성과 기능으로 이루어져 있으며 객체가 가지고 있는 속성과 기능을 멤버라고 한다. 예시로 살펴보면 아래와 같다.

class Tv {
	// 속성(member variable)
	String color; 
    boolean power;
    int channel;
    // 기능(method)
    void power() {power !=power;}
    void channelUp() {channel++;}
    void channelDown() {channel--;}
}

인스턴스의 생성과 사용

//형식 -> class_name variable_name = new class_name();
Tv t = new Tv(); // Tv라는 클래스 객체를 t라는 참조변수에 저장

참조변수가 인스턴스를 다루고 있는데, 이때 참조변수의 타입은 인스턴스의 타입과 일치해야한다.

객체 배열이란

많은 수의 객체를 다루어야 할 때, 배열의 개념을 적용시켜 한번에 다루면 편할 것이다.

Tv[] tvArray = new Tv[4]; //참조변수를 넣을 배열 생성
// 객체를 생성하여 각 요소로 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
tvArr[3] = new Tv();

혹은 배열에서 배운 초기화 방법으로 한 줄로 간단히 요약할 수 있고, 생성해야 할 객체가 많은 경우에는 for문을 통해 구현할 수도 있다.

변수의 종류

클래스에서 다루는 변수는 크게 3가지로 나눌 수 있다. 클래스변수, 인스턴스변수, 지역변수가 있으며, 각각의 변수는 코드에서 구현 방법이 달라진다.

class Variables{
	int instance_variable; // 인스턴스 변수 생성시에는 타입만 지정한다
    static int class_variable; // 클래스 변수 생성시에는 static을 붙인다
    void method() {
    	int local_variable; // 지역변수는 클래스 영역 이외의 영역인 메소드 영역에서 구현
    }
}

각 변수를 코드에서 구현하는 방법을 보았으니 각 변수의 특징을 살펴보자. 먼저 인스턴스변수는 클래스 영역 내에서 선언되며, 인스턴스변수가 생성될 때 생성된다. 각 인스턴스마다 다른 값을 가져야 할 때 정의한다. 클래스변수는 인스턴스변수와 마찬가지로 클래스 영역 내에서 정의되며 클래스를 메모리에 올릴 때 정의된다. 다른 점은 모든 인스턴스가 클래스 변수값은 공유하기 때문에 모든 인스턴스의 공통적인 속성의 경우는 클래스변수로 정의해야 한다. 지역변수는 메소드 영역 내에서만 사용이 가능하며 메소드가 종료되면 소멸되어 사용할 수 없다.

메소드의 선언과 구현 방법

메소드는 선언부와 구현부로 구분되며, 다음의 예시를 통해 구분해보겠다.

return_type method_name (type variable1, type variable2, ...){
	//메소드가 호출시 실행할 코드 작성하는 부분
}

위의 코드에서 {를 기준으로 앞까지를 선언부라고 부르며, {}사이 부분을 구현부라고 부른다. 메소드를 선언 이후에는 변경사항이 발생하지 않도록 설계해야하는데, 변경사항이 발생하면 호출하는 모든 곳을 수정해야하기 때문이다. 특이한 점으로는 메소드가 끝난 후 반환하는 값의 타입을 지정해놓는다는 것인데 실제 return 값과 일치하지 않으면 문제가 생긴다. 만약 반환값이 없는 경우에는 return_type 자리에 void를 입력하면 된다.

Reference

Java의 정석
남궁성의 정석코딩

profile
개발자 지망생입니다.

1개의 댓글

comment-user-thumbnail
2022년 1월 8일

도움이 되었어요!!

답글 달기