클래스

성혜·2024년 1월 21일
0

Java

목록 보기
7/25
post-thumbnail

클래스를 알아보기 전에 자바에 대해 살짝 정리!

객체 지향 프로그래밍 언어
- Object Oriented Programming Language >OOP
- 객체를 중심으로 프로그램을 만드는 방식
- 클래스라는 설계도를 사용해서,
  객체라는 것을 만들고,
  만들어긴 객체를 사용해서,
  내가 원하는 행동을 구현하는 것.  
  

1. 클래스, Class

  • 객체를 만들기 위한 설계도
  • 객체를 분류하는 기준
  • 붕어빵 틀

2. 객체(개체), Object

  • 붕어빵

3. 인스턴스, Instance

  • 붕어빵
  • 메모리에 실체화된 객체

4. 추상화

  • 실존하는 객체들의 공통점을 모아서 정의
  • 단순화

5. 정보은닉

  • 객체의 내부를 외부에 노출시키지 않는 작업
  • 내부를 외부로부터 보호하는 역할
  • 외부에 객체를 봤을 때 행동을 단순화 시키는 역할

6. 캡슐화

  • 외부로부터 내부를 보호하는 작업

7. 인터페이스

  • 케이스의 구멍 + 버튼
  • 객체 = 데이터(변수) + 행동(메서드)

8. 프로퍼티(Property), 속성(Attribute)

  • 데이터(변수)
  • 객체가 가지는 정보

9. 행동(Behavior)

  • 매서드
  • 객체가 가지는 행동

10. 상속(Inheritance)

  • 클래스간의 상속

클래스, class

새로운 데이터 타입을 만드는 데이터 타입 생성기
=> 클래스는 데이터 타입을 만들며 그리고 데이터 타입은 변수를 생성하며 변수에는 상수를 할당할 수 있습니다

데이터 저장 구조 > 관리 용이

각 멤버의 이름 지정 가능 > 데이터 성질 구분 용이


클래스 만들기

1. 클래스 선언하기

붕어빵 틀 만들기
클래스 명 : 파스칼 표기법 (무조건 대문자로 시작)

class Student{
	//구현부
}

  • 클래스 선언 시 권장 사항
    : 클래스 1개당 물리적인 파일을 1개를 만든다.
    => 관리가 용이하기 때문에

  • 절대 규칙

    : 파일의 이름과 클래스 이름이 동일해야한다.
    => 안 지키면 컴파일 에러

    : 하나의 파일안에 2개 이상의 클래스를 선언 할 때
    => 파일내의 모든 클래스 중 public 를 가지는 클래스는 유일해야한다.
    => public 클래스 > 대표 클래스 > 대표 클래스의 이름이 파일명이 된다.


  1. 멤버 선언하기
    : 변수와 메서드
class Student{
	//구현부
    //멤버 변수
    int age;
    String name;
    
    //멤버 메서드
    public void hello() {
		System.out.printf("안녕하세요. 저는 %s입니다.\n",name);
	}


클래스만의 특징

: 클래스는 구조체를 발전시켜 만들어 비슷한 점이 많지만 차이점이 존재한다.

  • 선언과 메모리 할당
  • 데이터의 접근 방법(Private, public)
  • 멤버 메서드 포함
  • 상속의 개념 적용

1. 선언과 메모리 할당

: 자바의 클래스 개념에서는 반드시 new 연산자로 메모리를 생성시켜줘여한다!!

=> 생성자 메서드
: new라는 연산자를 이용해서 메모리를 생성하고 생성자메서드를 이용하여 멤버 필드를 초기화 작업 해주는 것!


//자바 클래스 데이터 타입의 변수 선언과 메모리 할당

Student s1 = new Student();

// Student : 클래스로 생성한 데이터 타입
// s1 : Student 데이터 타입으로 선언한 변수
// new : 메모리를 생성하는 연산자
// Student : 메모리 생성 후 초기화 작업 담당하는 생성자

2. 데이터 접근 방법(Private, public)

: 접근제어는 새로운 데이터 타입을 만들고 그 데이터 타입으로 객체를 선언한 후 , 객체 내의 변수 값을 할당 할때 값을 직접 할당 할 수 있는가 없는가를 결정한다.

클래스의 경우
private - 값을 직접 할당 불가능
public - 값을 집접 할당 가능

: 접근제어의 기본 원칙은 메모리가 생성된 후 접근을 말한다.

여기서!!
: 클래스의 실행 타임과 디자인 타임을 명확히 구분해야한다!!

  • 실행 타임
    : 객체를 생성하고 메모리를 할당 한 후

  • 디자인 타임
    : 현재 클래스 내부를 만들고 디자인 하는 시점

=> 지금은 실행 시의 접근제어에 대해 학습 중!

이는 메모리가 생성된 후 점(.)을 이용해 접근 할 수 있느냐, 못 하느냐가 문제!!


그렇다면
private는 어떻게 접근할까?

=> 메서드 이용


public class Test5{
    private int top_secret;
    public void setMyTop(int x){
    			top_secret = x;
    }
    public int getTop(){
                return top_secret;
    }
}

public class Test5Main {
       public static void main(String[] args) {
       		int s;
            Test5 t5 = new Test5();
            t5.setMyTop(1000);
            s = t5.getTop();
            System.out.println(s);
            System.out.println(t5.getTop());
      }
}

//출력결과
1000
1000

setMyTop이란 메서드는
: 데이터 타입이 void, 즉 리턴하지 않는 메서드이다.
: int형의 매개변수를 하나 받는다.
: 외부에서 들어오는 데이터를 넘겨 받아 클래스 내부의 멤버 필드에 넣어준다.

getTop
: int형으로 리턴 해주는 메서드
: 매개변수 없음

즉, private로 선언된 멤버 필드에 직접 접근 할 수 없기 때문에 외부로부토 들어오는 데이터를 매개변수를 통해서 내부의 멤버 변수에 전달해주고 외부로 내보낼때는 메서드 리턴을 통해 전달한다.
그리고 Test5이란 데이터 타입은 메모리가 생성된 후
public 메서드 2개를 사용해서 내부의 private 멤버 필드에 값을 넣고 값을 받아내는 역할을 하고 있다.


여기서 궁금한 점

Q. 어떻게 Public 메서드는 private 멤버필드를 바로 사용할 수 있는가?

: 아까 전에 클래스의 실행 타임과 디자인 타임을 구분해야한다고 말했죵?
: 새로운 데이터 타입을 만드는 순간은 클래스의 디자인 타임입니다. 그리고 만들어진 데이터 타입에 변수를 지정하고 메모리 생성하여 사용하는 것이 실행타임입니다.

즉 접근제어를 할 수 있는 타임은 실행타임이기 때문에 pubilc 메서드가 private 멤버 필드를 사용하는데 문제가 없다.
또한 클래스내의 멤버는 private,public을 따지지 않고 공유가 가능하다.


이렇게 메서드를 이용해서 접근해야 하는 private 멤버변수를 왜 사용해야 할까요..?

: 외부에서 들어오는 데이터를 가공하고 원하는 값으로 내보내기 위해서!!

=> 외부에서 어떤 데이터가 들어와도 public 메서드를 통해야하기 때문에 최종적으로 private 멤버 변수에 들어가 때 데이터를 정제할 수 있다. 또한 내 보낼 때에도 다시 가공해서 내보대기 때문에 데이터를 넣고 빼는 사람은 내부에 어떤 일이 일어나는지 알 필요없이 원하는 값을 얻을 수 있다. = 은폐화


profile
하루를 정리하고 기록합니다.

0개의 댓글