Java 기초 : 객체 지향 프로그래밍(Object-Oriented Programming)

soir·2021년 2월 18일
0

Java

목록 보기
1/3

객체지향과 절차지향

절차지향은 코드를 짜면 순차적으로 실행함을 뜻한다. 보통 객체지향 언어는 C++, JAVA 등이, 절차지향 언어는 C가 있는데 JAVA와 같은 객체지향 언어에서도 코드는 순차적으로 실행된다.

따라서 비슷한거 아냐? 라고 생각할 수도 있지만 객체지향과 절차지향의 가장 큰 차이는 클래스Class라고 할 수 있다. 프로젝트, 패키지와 같은 큰 단위 객체는 for문으로 반복 생성이 불가하며 만약 100개의 프로젝트를 만들 경우 프로젝트를 만드는 코드를 100개 짜야 한다.

그러나 객체지향 언어를 사용하면 클래스를 사용하여 외부 클래스에서 해당 클래스를 가져오는 것이 가능하다. 클래스가 객체를 의미한다고 생각하는 것이 편할 듯.

Class

클래스는 속성(멤버변수)과 함수(메소드)로 이루어진다.


public class java{

	// field
    String teacher;
    String[] students;
	
    // method
    void teaching() {
         System.out.println("수업 중!");
    }
}

위 코드에서 java라는 클래스는 하나의 메소드와 두 개의 멤버 변수로 이루어져 있다.

1) 멤버 변수는 클래스에서 사용하는 변수(Variable)를 의미한다. 멤버변수 또는 필드(Field)라고 부른다.

2) 메소드는 클래스의 함수(Function)를 의미한다. C에서는 함수라고 부르지만 JAVA의 경우 메소드라는 호칭을 사용한다.

클래스의 인스턴스화

클래스는 설계도와 같다. 따라서 클래스를 만든다고 객체가 생성되는 것은 아니고, 클래스를 사용하여 실제 클래스 객체를 만든다. 이를 인스턴스(Instance)라고 한다.

Java j1 = new Java();

이처럼 Java()라는 생성자가 호출되는 시점에서 인스턴스화가 이루어진다. 이를 통해 하나의 클래스로 여러 객체들을 생성할 수 있다.

접근제한자

접근제한자는 클래스, 멤버변수, 메소드 등을 다른 클래스에서 사용하는 것을 제한하기 위해 사용한다. 보통 메소드는 public이나 default, 멤버변수는 private를 많이 사용한다. 클래스의 접근제한자는 public이나 default를 사용한다.

접근 제한자로는 private - default - protected - public이 있다. (보안성 순)

private

해당 요소가 선언된 클래스에서만 사용 가능하다. (자기 자신만 접근 가능)

default

접근제한자를 따로 설정하지 않을 경우 기본값으로 주어진다. 같은 패키지 내에 있는 클래스만 접근 가능하다.

protected

default와 유사하지만, protected가 선언된 요소는 같은 패키지 내 클래스와, 해당 요소가 선언된 클래스를 상속받은 자식 클래스에서도 사용이 가능하다(같은 패키지가 아니어도).

public

모든 클래스에서 접근 가능하다.

Encapsulation(은닉화)

외부 클래스에서 해당 요소(멤버변수)에 직접적으로 접근하지 않고(멤버변수는 보통 보안성을 위하여 private로 선언한다) 요소가 선언된 클래스의 메소드를 사용하여 간접적으로 사용하게 할 수 있다. 이를 은닉화(Encapsulation)라고 한다.

요소를 가져오는 메소드, 요소의 값을 설정하는 메소드를 getter 또는 setter라고 부르며, 이름은 get+가져올요소 / set+가져올요소 로 짓는것이 convention이다.

getter 메소드로는 해당 변수값을 가져오고(리턴값 있음) setter 메소드로는 해당 변수값을 재설정한다(리턴값 없음. void).​

class heejin{

	 // field
     private int age = 23;

     private String name = "soir";
     private String gender = "female";

     // getter and setter
     String getName() {
           return this.name;
     }

     void setName(String name) {
           this.name = name;
     }
}

외부 클래스에서 heejin 클래스의 멤버변수 name을 변경하고 싶다고 가정하면, name은 접근제한자가 private로 설정되어 있으므로 접근이 불가능하다. 이 때 setter메소드인 setName을 이용하여 입력한 파라미터값으로 name값을 바꿀 수 있다. 현재 클래스의 name 멤버변수값만 얻어오고 싶은 경우에는 getter인 getName을 사용한다.

메소드는 객체.getName()과 같은 방식으로 호출 가능하다.

Constructor(생성자)

생성자(Constructor)는 클래스 객체가 인스턴스화 될 때 호출되는 메소드를 의미한다.

1) return 값을 가지지 않고(void)
2) 클래스 이름과 같은 이름을 갖는다.

Constructor OverLoading

생성자는 클래스를 만들 때 자동으로 만들어지므로, 생성자 내용을 변경하고 싶지 않다면 따로 표기할 필요가 없다. 파라미터 타입과 개수로 오버로딩(OverLoading)이 가능하다.

오버로딩(OverLoading)
이름이 같은 생성자를 파라미터의 타입이나 개수만 다르게 해서 새로이 만드는 것(생성자 여러개 생성 가능)

클래스를 만들 때 자동으로 생성되는 생성자를 기본 생성자(Default Contructor)라고 하는데, 오버로딩하여 새롭게 만든 생성자 코드 내에서 기본 생성자의 호출이 가능하다. 기본 생성자 호출 코드는 다음과 같다.

public heejin() {
         //default constructor 
         System.out.println("안녕!");
    }


public heejin(int age) {
         this(); // 기본 생성자 호출 코드
         System.out.println("나는 " + age + "살");
}

profile
에러 뜨면 우는 사람

0개의 댓글

관련 채용 정보