본문 바로가기
기타/JAVA

[JAVA 1학년] 4장 '객체 지향'이란 무엇일까?

by 거북이 코딩 2023. 9. 8.

16. 객체 지향 사고방식이란?

 

 저도 처음 객체 지향을 배울 때 '객체 지향이 도대체 무슨소리야?' 라고 생각했습니다. 이름만 봐서는 상상의 나래를 펼칠 뿐 정확한 의미를 파악하기는 어려웠기 때문입니다. 객체 지향 프로그래밍이란 '현실세계의 구조를 본떠서 문제를 해결해보자' 라는 아이디어에서 시작된 방식으로 객체(object)를 여러개 만들어서 객체들이 서로 메시지를 보내 도와주는 형태의 프로그래밍 방식을 뜻합니다. 객체 지향을 사용하기 전 처음에는 절차형 프로그래밍이 주류였습니다. 문제를 해결하는 절차를 작성해서 정해진 절차대로 해결해 가는 방법입니다. 단순한 작업을 하기에는 유리하지만 복잡한 프로그래밍에서는 너무 복잡해진다는 단점이 있었습니다. 그래서 나온것이 객체 지향 프로그래밍 입니다.

 

객체 지향 프로그래밍의 장점

  • 복잡한 구조를 이해하기 쉬워진다.
  • 대규모 프로그램을 만들기 쉽다.
  • 변화에 유연하게 대처하기 쉽다.

17. 클래스와 인스턴스

 

클래스 : 객체에 관한 상세한 내용이 작성된 것을 클래스(Class)라고 합니다.

인스턴스 : 클래스로부터 움직이고 다룰 수 있는 대상으로서 등장시킨 것이 인스턴스입니다.

 

18. 클래스를 만드는 방법

 

클래스를 만드는 규칙

  • 한 클래스를 한 파일로 만든다
  • 파일명은 클래스명과 같은 이름으로 만든다
  • 클래스는 중괄호를 이용해서 만든다
서식 : 클래스
class 클래스명 {
}

 

 

 인스턴스를 만들때는 클래스 밖에서 작성합니다. main으로 돌아가서 새 클래스의 인스턴스를 만듭니다. 인스턴스는 변수에 넣어서 다루는데 이때 변수의 데이터형은 클래스명이 됩니다.

서식 : 클래스에서 인스턴스를 만든다
클래스명 변수명 = new 클래스명();

 

19. Java 언어의 이름 규칙

 

변수나 메소드 이름은 다음 세가지 규칙을 바탕으로 작성한다.

  • 첫 글자는 알파벳이나 '_' 또는 '$' 기호를 쓴다.
  • 두 번째 글자부터는 숫자도 쓸 수 있다.
  • Jav가 예약한 예약어는 쓸 수 없다.

변수명 (카멜 케이스)

  • 기본적으로 모두 소문자로 이름을 붙입니다. (ex. count, width, word)
  • 2개 이상의 단어로 만든 이름을 붙일 수 있습니다. 이 경우 두 번째 이후 단어는 대문자로 시작해야 합니다. (ex. myData, userName, totalScore)

메소드명 (카멜 케이스)

메소드에는 이 메소드가 무엇을 하는지 알 수 있도록 이름을 붙입니다. 메소드는 무엇인가를 실행하는 명령이므로 동사와 명사를 조합해서 이름을 붙입니다. 두 번째 이후 단어는 대문자로 시작합니다. (ex. addValue, isEmpty, clearAll)

 

클래스명 (파스칼 케이스)

클래스에는 이 클래스가 어떤 역할을 하는지 알 수 있도록 이름을 붙입니다.

  • 클래스명은 모든 단어가 대문자로 시작합니다. (ex.Calendar)
  • 2개 이상의 단어로 만든 이름을 붙일 수도 있습니다. 이 경우 두 번째 이후 단어도 대문자로 시작합니다. (ex. MessageFormat, SimpleDateFormat)

 

20. 필드와 메소드

 

'필드'는 클래스가 가진 변수를 말합니다.

메소드는 클래스가 할 수 있는 일로 객체가 실제로 실행할 처리순서가 적혀있고 클래스의 행동이라고도 합니다.

 

필드와 메소드에 엑세스하기

필드와 메소드에 엑세스 할 때는 인스턴스명과 필드명을 '마침표(.)'로 연결해서 지정합니다. 예를 들어 myClass 라는 인스턴스에 있는 myName이라는 필드에 엑세스 하려면 myClass.myName이라는 식으로 엑세스하고 hello()라는 메소드를 호출할 때는 myClass.hello()라고 호출합니다.

 

자기 이름을 말하는 간단한 클래스를 만들어 보겠습니다.

 

클래스 필드에 엑세스하는 예제를 만들어 보겠습니다.

 

21. 생성자로 초기 설정하기

 

생성자(Constructor)란 인스턴스를 만들 때 자동으로 실행되는 특별한 메소드를 가리킵니다. 일반 메소드와 똑같지만 이름은 클래스명과 같은 이름을 사용하고 반환값이 없으므로 반환값의 형을 지정하지 않는 점이 다릅니다.

서식 : 생성자
클래스명(){
인스턴스가 만들어질 때 실행할 처리
}

생성자에는 반환값이 없지만 인수를 지정할 수 있습니다. 인스턴스를 만들 때 인수로 값을 전달해서 초기 설정을 변화시킬 수 있는 것입니다. 인수가 있는 생성자는 변화를 주고 싶을 때 사용하는 생성자이고 인수가 없는 보통 생성자쪽을 기본생성자(default constructor)라고 합니다.

 

클래스를 이용해서 계산문제와 답을 출력하는 예제를 만들어 보겠습니다.

 

Main 클래스만 수정해서 문제 10개씩 만드는 프로그램을 만들어 보겠습니다.

 

22. 필드와 로컬 변수

 

클래스에는 필드와 로컬 변수라는 두 종류의 변수가 있습니다. 필드란 클래스가 가진 변수를 말하는데 객체에 저장하고 싶은 데이터에 사용합니다. 필드는 인스턴스를 만들면 동시에 생성되고 인스턴스가 있는 한 계속 존재합니다.

프로그램 예제
class Test {
    int answer = 0;
}

 

로컬 변수는 블록 안에서 일시적으로 사용되는 변수로 메소드나 for문 안 등에서 일시적으로 처리에 사용합니다. 로컬 변수는 블록 안에서만 존재하고 블록이 종료하면 사라져 버립니다. 이 로컬변수가 존재하는 범위를 스코프(scope)라고 합니다.

프로그램 예제
class Test{
    void hello(){
        int answer = 0;//hello 메소드에서만 사용하는 변수
    }
    for (int i=0;i<5;i++){
        //처리
    }
    //for문을 빠져나오면 i는 사라진다.
    for (int i=0;i<5;i++){//다시 i를 사용할 수 있다.
        //처리
    }
}

 

명확하게 로컬 변수와 필드 구별하기

필드와 로컬변수의 변수명이 같을 경우 구분이 어려울 수 있습니다.

다음과 같은 상황에선 로컬변수를 우선하므로 a=2가 됩니다. 이처럼 헷갈리는 상황에서 필드와 로컬변수를 구분하기 위해 필드에는 this를 붙이는 표기법을 사용합니다.

서식 : 필드를 사용할 때
this.필드명

 

스코프의 범위

스코프의 범위

 

마치며

 

이번 장은 자바의 핵심인 객체지향을 간단하게 배우는 가장 중요한 장이었습니다. 절차형과 객체형, 클래스와 인스턴스, 이름을 붙이는 방법, 생성자, 필드와로컬변수, 스코프까지 배워봤는데요. 생각보다 이름을 붙이는 방법이 저에겐 많은 도움이 되었습니다. 모르고 써왔던 저로써는 변수와 클래스명을 별다른 규칙없이 지었는데 규칙을 배운 후로는 예제에서도 쉽게 클래스와 변수를 구분할 수 있었습니다. (ex. Integer.toString, System, println) 자바를 배우기 시작한지 일주일정도 된거같은데 벌써 꽤 많은걸 배운것 같아 뿌듯합니다. 다음장은 마지막 장인 객체지향을 좀 더 알아보자 입니다. 마지막까지 화이팅!