Java 기초 (10) 클래스, 인스턴스, 접근제어자

코린이서현이·2023년 7월 18일
0

Java

목록 보기
10/46

🔥오늘의 목표🔥

객체의 틀을 만드는 클래스와 클래스를 만드는 방법, 클래스를 통해 만든 인스턴스에 대해서 알아보자.

📕 클래스

: 객체의 속성과 기능을 코드로 구현한 것이다.
"클래스를 정의한다." = 객체를 클래스로 구현한 것

📖 클래스 정의 방법 : class 예약어를 사용한다.

	class 클래스이름{
    
}
  • 클래스는 특정 변수(속성)과 특정 기능을 가질 수 있다.
  • 클래스이름은 대문자로 시작한다.
  • .java파일은 이름이 동일한 public class를 가진다.

✍️ 예제코드

public class Student {
	int studentID;
	String studentName;
	int grade;
	String address;
}

👉 이 클래스가 담긴 파일의 이름은 Student임을 알 수 있다.

📖 class의 변수 : 멤버변수(인스턴스 변수)

  • 클래스 내부에 선언돼 객체 속성을 나타내는 변수이다.

📃 멤버 변수의 자료형

  • 기본 자료형 : 자바에서 제공하는 int , double등을 말한다.
  • 참조 자료형 : 클래스형이나 객체 자료형이라고 말한다.
    • 자바에서 제공하는 String, Date
    • 개발자가 직접 만든 클래스

📒 참조 자료형

  • 클래스 멤버 변수를 다른 클래스 자료형으로 선언한다.
  class Subject {
      String subjectString;
  }

  class Studentr{
      String name;
      Subject korSubject;		//자료형을 다른 class로 한다. 
  }

📖 class 생성 방법

new라는 예약어와 생성자를 사용한다.

	//(클래스 자료형) 참조변수명 = new 생성자;
	Student seohyun = new Student();

👉 참조변수 seohyun에 인스턴스가 생성된 힙메모리의 주소가 저장된다.

📖 class 메소드

  • 객체의 기능을 구현한 것이다. 매개변수나 반환값을 가질 수 있다.
	반환형 메소드명 (매개변수){
    
    }

📕 인스턴스

클래스가 메모리 공간에 생성된 상태
인스턴스 : 힙메모리공간에 저장

  • 하나의 클래스로 여러 인스턴스를 만들 수 있다.
  • 클래스가 생성될때마다 새로운 힙메모리 공간이 부여되고 클래스의 멤버변수는 각각의 메모리 공간을 가진다. (멤버변수를 인스턴스 변수라고 하는 이유)

✍️ 예제코드

package test;

class School {
	String nameString;
}

public class Student{
	public static void main(String[] args) {
		
		School pusanSchool = new School();
		School seoulSchool = new School();
		
		seoulSchool.nameString = "서울";
		pusanSchool.nameString = "부산";
		
		System.out.println(seoulSchool.nameString);         //서울 출력
		System.out.println(pusanSchool.nameString);         //부산 출력
	}
}

👉 같은 클래스지만 각 인스턴스별로 구분된 멤버 변수를 가지기 때문에 각각 다른 출력값을 준다.
더 알아보기

이 클래스는 누가 접근할 수 있을까? 접근을 제어하는 접근제어자에 대해서 알아보자.

➕파일의 구조

🗂️ 프로젝트 : 가장 상위구조의 폴더
🔲 패키지 : 클래스 파일의 묶음이다.
📗 클래스 : 실제 코드가 적혀 있는 곳

package hellword;				//hellword 패캐지

public class Hi {				//클래스 이름 : Hi (대문자로 시작)
	
    public static void main(String[] args)  		
		System.out.println("Hi");
	}
}

👉 이 클래스의 풀 네임은 hellword.Hi이다.

📕 접근제어자

  • 클래스, 메소드, 변수의 접근 범위를 제어하는 예약어
접근 제어자같은 클래스의 멤버같은 패키지의 멤버자식 클래스의 멤버그 외의 영역
public
protectedX
defaultXX
privateXXX

📒 접근제어자 : public

외부 클래스 어디에서나 접근할 수 있다.
내부 패키지도 접근할 수 있다.

➕클래스의 풀 네임 : 소속패키지이름.클래스명까지이다.
따라서 다른 패키지에서 접근할 때는 패키지이름.클래스명으로 풀네임을 쓰던지 import예약어를 쓴다.

	import side1.Protected;

📒 접근제어자 : protected

  • 외부클래스여도 상속관계클래스라면 접근할 수 있다.
  • 같은 패키지 내부에서 접근할 수 있다.

📒 접근제어자 : default

  • 같은 패키지내에서 접근 할 수 있다.
  • 따로 정의할 필요는 없고 기본으로 적용된다.

📒 접근제어자 : private

  • 같은 클래스 파일에서만 접근할 수 있다.
    👉 메소드를 통해서 변수 값 변경가능

🤔활용 방법
문제 상황 : 클래스 변수를 바꾸는 것에 조건이 필요할 때 ex) 꼭 25이상으로만 해야함!
해결 방법 : 다른 클래스에서 접근할 수 있는 메소드를 사용해서 변수 값 설정을 통제할 수 있다.

✍️ 예시코드

package test;

//클래스
class  PrTest {
	//변수의 값을 5~10의 값으로만 유지하고 싶음.
	private int privateint;
	int i;
	
	void set(int input) {
		if((5<=input)&&(input<=10)) {
			this.privateint = input;
			System.out.println("privateint값 " + this.privateint);
		} else {
			System.out.println("privateint값은 5~10의 값만 적용된다.");
		}
	}
}

public class Private {

//main함수
	public static void main(String[] args) {
		//클래스 생성자 new
		PrTest test = new PrTest();
		
		test.i = 15;						//접근가능함
		System.out.println(test.i);			//15출력
//		test.privateint;					//private는 접근 불가 → 오류
		
		test.set(3);						//privateint값은 5~10의 값만 적용된다.
		test.set(7);						//privateint값 7
		test.set(17);						//privateint값은 5~10의 값만 적용된다.
				
	}
}

👉 실행화면

  15
  privateint값은 5~10의 값만 적용된다.
  privateint값 7
  privateint값은 5~10의 값만 적용된다.

👊오늘의 느낀점👊

예제를 많이 담으려고 노력했다. 
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

4개의 댓글

comment-user-thumbnail
2023년 7월 18일

많은 도움이 되었습니다, 감사합니다.

1개의 답글
comment-user-thumbnail
2023년 7월 18일

뛰어난 글이네요, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기