뚜sh뚜sh

클래스 본문

Language/Java

클래스

뚜sh뚜sh 2023. 7. 1. 18:53

형식

1. 클래스 형식

class 클래스명 {
			//field, constructor, and
			// method declarations
		}
	}

- 멤버변수, 필드 : 클래스 안에 선언된 변수

- 메소드(method) : 클래스 안에 선언된 함수

package first;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
	}
}

class Book {
	
}

 

2. 멤버변수 또는 필드 형식

- 공용 변수

- 전역 변수와 유사한 속성 -> 클래스 안에서만

- 객체 속성은 곧 멤버변수이다

class Book {
	String m_strTitle; // 책 제목
	int m_nPage; // 페이지 수
	String m_strPublisher; // 출판사
	int m_nPrice; // 가격
}
// m_ : 멤버변수라는 의미

 

3. 메소드 형식

class Book {
	String m_strTitle; // 책 제목
	int m_nPage; // 페이지 수
	String m_strPublisher; // 출판사
	int m_nPrice; // 가격
	
	void SetTitle(String strTitle) {
		m_strTitle = strTitle;
	}
	
	String GetTitle() {
		return m_strTitle;
	}
	
	void SetPage(int nPage) {
		m_nPage = nPage;
	}
	
	int GetPage() {
		return m_nPage;
	}
	
	void SetPublisher(String strPublisher) {
		m_strPublisher = strPublisher;
	}
	
	String GetPublisher() {
		return m_strPublisher;
	}
	
	void SetPrice(int nPrice) {
		m_nPrice = nPrice;
	}
	
	int GetPrice() {
		return m_nPrice;
	}
}

 

 

 

객체 생성과 사용

- new

- .을 사용하여 멤버변수와 메소드에 접근

package first;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book JavaBook = new Book();
		JavaBook.SetTitle("자바 공부 재밌다");
		System.out.println("Book Title : "  + JavaBook.GetTitle());
			
		JavaBook.m_strPublisher = "Now Communication";
		System.out.println("Publisher: " + JavaBook.m_strPublisher);
	}
}

class Book {
	String m_strTitle; // 책 제목
	int m_nPage; // 페이지 수
	String m_strPublisher; // 출판사
	int m_nPrice; // 가격
	
	void SetTitle(String strTitle) {
		m_strTitle = strTitle;
	}
	
	String GetTitle() {
		return m_strTitle;
	}
	
	void SetPage(int nPage) {
		m_nPage = nPage;
	}
	
	int GetPage() {
		return m_nPage;
	}
	
	void SetPublisher(String strPublisher) {
		m_strPublisher = strPublisher;
	}
	
	String GetPublisher() {
		return m_strPublisher;
	}
	
	void SetPrice(int nPrice) {
		m_nPrice = nPrice;
	}
	
	int GetPrice() {
		return m_nPrice;
	}
}

 

 

 

접근 제어자

- private : 클래스 안에서만 접근 가능

- public : 전체에서 접근 가능

- protected : 같은 클래스와 패키지 그리고 하위 클래스에 접근 가능

- friendly 또는 생략된 제어자 : 같은 클래스와 패키지 안에서만 접근 가능

 

 

1. 접근 제어자 사용 형식

- 접근제어자 데이터형 변수명;

  • public int m_nVar;

- 접근제어자 리턴형 함수명();

private int GetVar() {
	return m_nVar;
}

 

 

 

 

오버로딩(overloading)

- 중복되는 메소드명을 클래스 안에서 정의할 수 있도록 하는 것

- 같은 함수명으로 다양한 값을 받아 처리

- 함수명 하나만 기억하면 됨

package first;

public class test1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OverLoadTest OverLoadObject = new OverLoadTest();
		System.out.println("Add(int nVar1, int nVar2) : " + OverLoadObject.Add(10, 2));
		System.out.println("Add(float fVar1, float fVar2) : " + OverLoadObject.Add(3.0f, 0.14f));
		System.out.println("Add(int nVar1, int nVar2, float fVar1) : " + OverLoadObject.Add(10, 2, 3.14f));
	}
}

class OverLoadTest {
	public int Add( int nVar1, int nVar2) {
		return nVar1 + nVar2;
	}
	
	public float Add(float fVar1, float fVar2) {
		return fVar1 + fVar2;
	}
	
	public int Add( int nVar1, int nVar2, float fVar1) {
		return nVar1 + nVar2 + (int)fVar1;
	}
}

 

 

 

생성자(constructor)

- 객체가 생성될 때 한번 호출되는 메소드

- 자동으로 호출되는 메소드

- 리턴형이 없고 클래스명과 함수명이 같다

- public

class MyClass {
	public MyClass() {
	}
	public MyClass(int nVar1, int nVar2) {
	}
}
package first;

public class MyClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A Test1 = new A();
		System.out.println("Test1 m_nVar: " + Test1.Get());
		System.out.println("Test1 m_fVar: " + Test1.m_fVar);
		
		A Test2 = new A(7);
		System.out.println("Test2 m_nVar: " + Test2.Get());
		System.out.println("Test2 m_fVar: " + Test2.m_fVar);
	}
	
	

}
class A {
	private int m_nVar;
	public float m_fVar = 3.14f;
	
	public A() {
		m_fVar = 12;
	}
	
	public A(int nVar) {
		m_nVar = nVar;
	}
	
	public int Get() {
		return m_nVar;
	}
}

 

 

 

this, this()

1. this

- 객체 자신을 참조하는 참조형 클래스 변수 또는 키워드

- this.멤버변수

- this.메소드()

package first;

public class MyClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A Test = new A();
		Test.SetPrint(8);
	}
	
	

}
class A {
	private int m_nVar;
	
	public void SetPrint(int nVar) {
		this.m_nVar = nVar;
		this.Print();
	}
	
	public void Print() {
		System.out.println("m_nVar : " + m_nVar);
	}
}

 

2. this()

- 생성자에서 또 다른 생성자를 호출

- 생성자 첫 줄에서 호출

package first;

public class MyClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A Test = new A();
		System.out.println("m_nVar : " + Test.m_nVar);
		System.out.println("m_fVar : " + Test.m_fVar);
	}
	
	

}
class A {
	public int m_nVar;
	public float m_fVar = 0.5f;
	
	public A() {
		this(3.14f); // 첫 줄에서 다른 생성자 호출
		m_nVar = 12;
	}
	
	public A(float fVar) {
		m_fVar = fVar;
	}
}

 

 

 

static

- 접근제어자 static 데이터형 멤버변수명;

- 접근제어자 static 리턴형 메소드명(...);

1.  static 멤버변수와 메소드의 공통점

  • 객체가 생성되기 이전에 멤버변수와 메소드 사용 가능

2. static 멤버변수의 특징

  • 멤버변수는 생성되는 모든 객체에서 전역변수로 사용 가능
package first;

public class MyClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A.m_nVar = 5;
		
		A Test1 = new A();
		A Test2 = new A();
		A Test3 = new A();
		System.out.printf("%1$d %2$d %3$d\n", Test1.m_nVar, Test2.m_nVar, Test3.m_nVar);
		
		Test1.m_nVar = 11;
		System.out.printf("%1$d %2$d %3$d\n", Test1.m_nVar, Test2.m_nVar, Test3.m_nVar);
		
		A.m_nVar = 7;
		System.out.printf("%1$d %2$d %3$d\n", Test1.m_nVar, Test2.m_nVar, Test3.m_nVar);
	}
}
class A {
	public static int m_nVar;
	
}
package first;

public class MyClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A.Print();
	}
}
class A {
	public static void Print() {
		System.out.println("hihi");
	}
	
}

 

3. static 멤버변수와 메소드의 사용규칙

- static 메소드 안에서 멤버 변수를 사용할 때 멤버 변수는 항상 static으로 선언된 것만을 사용할 수 있다

- static 메소드는 같은 클래스 안의 static 메소드만을 호출할 수 있다

- static 메소드 안에서는 this를 사용할 수 없다

- static 메소드는 오버라이딩을 할 수 없다

 

 

 

package

1. 개념

- 자주 사용되는 클래스를 모아 놓은 폴더

- 패키지명은 소문자를 사용 -> 관례

 

2. 형식

- package 패키지명;

- package mypackage.utility;

 

 

 

import

1. 사용

- C언어의 #include와 유사한 역할

- 클래스를 포함하고자 할 경우

 

2. 형식

- import 패키지명.클래스명; --------- 1

- import 패키지명.*; --------- 2

package test;

public class Utility {
	public void Print() {
		System.out.println("hihi");
	}
}
package first;
import test.Utility;

public class first {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Utility A = new Utility();
		A.Print();
	}

}

 

'Language > Java' 카테고리의 다른 글

추상 클래스(abstract class)  (0) 2023.07.03
상속(Inheritance)  (0) 2023.07.03
배열  (0) 2023.06.30
반복문과 선택문  (0) 2023.06.30
데이터와 연산자  (0) 2023.06.30
Comments