본문 바로가기
Study in Bootcamp/회고

Day 11 자바 JAVA 이론 (클래스, 객체, 필드, 메서드)

by Bhinney 2022. 7. 8.

2022.07.07


1. 오늘의 학습

  • 객체 지향
  • 클래스
  • 객체
  • 필드
  • 메서드

2. 학습 내용

객체 지향(Object Oriented Programing ; OPP)

• 자바는 대표적인 객체 지향 언어
• 자바는 숫자(int, float, long 등)나 논리값(true, false)을 제외한 거의 모든 것이 객체로 구성되어 있음
클래스(Class)

1) 클래스란?
     • 객체를 정리한 설계도 혹은 프레임
     • 객체를 생성하는 데 사용
     ❗️클래스는 객체 그 자체가 될 수 없음. 객체를 생성하는 틀

2) 클래스의 요소
     1️⃣ 필드 : 클래스의 속성
     2️⃣ 메서드 : 클래스의 기능
     3️⃣ 생성자 : 클래스의 객체를 생성
     4️⃣ 내부클래스 : 클래스 안의 클래스

3) 클래스의 작성 규칙
     1️⃣ 하나 이상의 문자로 이루어져야하며, 첫 번째 문자는 관례적으로 대문자로 사용
          (예 : classExample, classNewNumber, class StudyJava 등)
     2️⃣ 첫 번째 글자에는 숫자가 올 수 없음
     3️⃣ $, _를 제외한 예약어, 특수문자가 올 수 없음
객체(Object)

1) 객체란?
    • 클래스에서 생성된 데이터

2) 객체 생성
    • 클래스이름 참조변수이름 = new 생성자();
/* 클래스이름 참조변수이름;
참조변수이름 = new 생성자; */

ClothesExample ce;
ce = new ClothesExample();

/* 간단하게 표현하면,
클래스이름 참조변수이름 = new 생성자(); */

ClothesExample ce = new ClothesExample;


3) 객체 활용
     • 참조변수이름.필드이름 --> 필드 값 불러오기
     • 참조변수이름.메서드이름 --> 메서드  불러오기

package org.example;

public class Clothes {
    public static void main(String[] args){
    	// 클래스이름 참조변수이름 = new 생성자(); --> 객체 생성
        ClothesExample ce = new ClothesExample();
		
        				// 참조변수이름.필드이름; --> 필드 값 불러오기
        System.out.println("이 옷의 색깔은 : " + ce.color);
        System.out.println("이 옷의 종류는 : " + ce.type);
        
        // 참조변수이름.메서드이름(); --> 메서드 불러오기
        ce.ClothesMethod();
    }
}

class ClothesExample{ 
    String color = "RED"; 
    static String type = "DRESS"; 


    void ClothesMethod(){
        int p = 100; 
        System.out.println("이 옷의 가격은 : " + p +  "달러");
    }
}

/* 출력
이 옷의 색깔은 : RED
이 옷의 종류는 : DRESS
이 옷의 가격은 : 100달러
*/
필드(Field)

1) 필드란?
     • 클래스에 포함된 변수
     • 속성을 정의할 때 사용

2) 자바에서 변수
     1️⃣ 클래스 변수 (class variable ; cv) 
     2️⃣ 인스턴스 변수 (instance variable ; iv) 
     3️⃣ 지역 변수 (local varialbe ; lv) 

클래스 변수 인스턴스 변수 지역 변수
필드 + static 필드 필드❌
클래스 내에서 선언된 변수 메서드 내에서 선언된 변수
클래스 영역에 저장 힙 메모리 속 독립적 공간에 저장 스택 메모리 저장
공유 가능 공유되지 않음 메서드가 끝나면 소멸됨
클래스가 여러번 생성되어도
static 변수는 처음 한 번 만 생성
객체가 새로 생성될 때 마다
새로운 변수 생성
메서드 안에서 생성
직접 초기화 하지 않아도 강제로 초기화 직접 초기화하지 않으면,
출력할 때 오류 발생

package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce = new ClothesExample();

        System.out.println("이 옷의 색깔은 : " + ce.color);
        System.out.println("이 옷의 종류는 : " + ce.type);
        ce.ClothesMethod();
    }
}

class ClothesExample{ 
    String color = "RED"; // 인스턴스 변수 선언
    static String type = "DRESS"; // 클래스 변수 선언('static')


    void ClothesMethod(){
        int p = 100; // 메서드 안에서만 실행되는 지역 변수
        System.out.println("이 옷의 가격은 : " + p +  "달러");
    }
}

/* 출력
이 옷의 색깔은 : RED
이 옷의 종류는 : DRESS
이 옷의 가격은 : 100달러
*/​
메서드 (Method)

1) 메서드란?
     • 특정 작업을 수행하는 명령문의 집합
     • 클래스의 기능을 담당

2) 메서드의 분류
     1️⃣ 메서드 시그니처(method signature) :  반환타입, 메서드 이름, 매개 변수
     2️⃣ 메서드 바디 (method body) : 메서드의 내용 (괄호 속 메서드의 수행 내용)

/* 반환타입 메서드이름(매개 변수){
	메서드 내용} */

void ClothesMethod(){
	int p = 100;
	System.out.println("이 옷의 가격은 : " + p +  "달러");}


3) 메서드 호출
     • 메서드도 클래스, 클래스 밖에서 실행하기 위해서는 인스턴스가 필요
     • '.'(포인트 연산자)로 생성 가능
     
     ※ 객체 생성 예문 보기


4) 메서드 오버로딩 (method overloading)
     • 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
     • 하나의 메서드로 여러 개의 경우의 수 해결 가능
     ❗️오버로딩 성립 조건
           1️⃣ 같은 이름의 메서드
           2️⃣ 매개 변수 혹은 타입이 다르게 정의
package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce = new ClothesExample();

        System.out.println("이 옷의 색깔은 : " + ce.color);
        System.out.println("이 옷의 종류는 : " + ce.type);
        ce.ClothesMethod();
        ce.ClothesMethod(100);
        ce.ClothesMethod(90.0);
    }
}

class ClothesExample{
    String color = "RED";
    static String type = "DRESS";

		// 같은 이름의 메서드, 다른 타입
        void ClothesMethod(){ //String 타입
            String name = "ZARA";
            System.out.println("이 옷의 브랜드명은 : " + name);}
        void ClothesMethod(int p){ //int 타입
            System.out.println("이 옷의 가격은 : " + p +  "달러");}
        void ClothesMethod(double s){ //double 타입
            System.out.println("이 옷의 사이즈 : " + s);}
}

/* 출력
이 옷의 색깔은 : RED
이 옷의 종류는 : DRESS
이 옷의 브랜드명은 : ZARA
이 옷의 가격은 : 100달러
이 옷의 사이즈 : 90.0
*/​

3. 돌아보기

전체적으로 다시 한 번 더 정리를 하다보니 처음보다는 이해가 되었다. 하지만 아직 static부분이 조금은 어려운 것 같다. static부분은 더 구글링을 해보고 자료도 찾아보면서 이해해야 할 것 같다. 처음 개념을 잘 정리해야 나중에 코드를 쓰거나 내가 해석함에 있어서 어려움이 없을 것 같다. 그래서 예문의 코드를 따라해보고, 다시 응용하여 바꿔서 실행해보기도 했다. 바꿔서 실행한 코드가 바로 위에 내가 적은 코드들이다. 확실히 처음에 예문만 따라했을 때는 이해가 가지 않았는데, 응용하면서 에러가 나기도 하고 잘못 입력하기도 하면서 알아가는 것 같다. 특히 코드가 길어질 수록 내가 괄호를 한 개 더 입력하거나, 덜 입력하는 경우가 많았다. 앞으로 차분히 입력하고, 더 깔끔하게 코드를 쓰는 방법들을 생각해 봐야 할 것 같다.

 

대강 이해했다고 넘어가지 말고, 아는 개념들도 더 찾아보며 공부해야겠다!!

댓글