클래스 [class]

devlsn96·2024년 7월 31일
0

java 언어 개념정리

목록 보기
7/27
  • 객체(Object)지향 프로그래밍
    • 객체가 중심이 되는 프로그래밍 기법

1. 클래스(Class)

  • 객체의 설계도역할을 하는 프로그램소스

  • 공장에서 하나의 설계도를 사용하여 여러개의 제품을 생산할 수 있는 것처럼
    하나의 클래스를 동일한 구조를 갖는 객체를 여러개 생성할 수 있다.

  • 클래스의 이름규칙

    • 첫 글자는 대문자로 시작, 나머지 글자는 소문자로

    • 두 개 이상의 단어를 조합해야 할 경우, 새로운 단어는 "대문자"로 시작한다.

      		class MyClass
      		class Student
      		class NetworkHelper

1-1. 객체를 구성하는 단위

  • 객체를 이루는 것은 "데이터"와 "기능"
    • 데이터는 변수로 표현한다.
      • 객체안에 포함된 변수를 '필드', '멤버변수', '프로퍼티'라고 한다.
    • 기능은 메서드(=함수)로 표현된다.

1-2. 클래스의 기본 작성법

class 클래스이름{
	멤버변수;			
	
	void 메서드이름(){		
		....
	}
}
  • 'class'라는 예약어와 클래스의 이름을 명시{...}블록을 구성한다.
  • 멤버변수는 여러개 존재할 수 있다.
    이때 값을 선언과 동시에 할당할 수도 있고 객체를 통해 간접적으로 할당할 수도 있다.
  • 메서드는 여러개 존재할 수 있다.
  • 클래스안에 포함된 멤버변수와 메서드를 특성에 따라 그룹화 하기 위한 기법이 클래스를 작성하는 것이라고 이해할 수 있다.

1-3. 객체의 생성방법

  • 객체의 선언

    	클래스이름 객체이름;
  • 객체의 할당

    	객체이름 = new 클래스이름();
  • 선언과 할당의 통합

    	클래스이름 객체이름 = new 클래스이름(); 

1-4. 객체의 사용

  • 객체안에 포함된 변수나 메서드는 점(.)으로 연결하여 접근한다.

  • 객체안에 멤버변수 접근

    	객체이름.멤버변수;	
    	std1.name;
    	std1.age;
    	std2.name;
    	std2.age;
    
    	String username  = std1.name;	
    		  
  • 객체안에 포함된 변수의 값에 따른 값을 대입하는 경우

    	객체이름.멤버변수 = 값;
    	std1.name = "김자바";
  • 객체안에 포함된 메서드 호출

    	객체이름.메서드이름();
  • 객체안에 포함된 메서드에 파라미터 전달

    	객체이름.메서드이름(값1,값2,....);

1-5. null

  • 참조변수가 "어떤객체도 가리키지 않음"을 나타냄

1-6. 값이 대입되지 않는 멤버변수를 갖는 클래스

  • 클래스란 객체를 위한 틀을 제공하는 것이기 때문에
    클래스 작성과정에서 멤버변수에 대입된 값은
    객체를 통하여 멤버변수의 값을 지정하기 전까지 사용된
    "기본값" 으로서의 의미이다.
  • 객체를 통하여 새로운 값이 대입되면 클래스 작성시에
    멤버변수에 대입한 값은 의미를 잃어버리게 된다.
  • 때문에 일반적으로 클래스 작성시에는 멤버변수에 값을
    지정하지 않는다.

1-7. 메서드를 포함하는 클래스

  • 메서드란 프로그램에서의 "하나의 동작 단위"를 의미한다.
  • 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우,
    이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다.
  • 클래스에 멤버변수와 메서드가 공존할 경우,
    멤버변수는 모든 메서드가 공유하는 "전역변수"로 존재하게 된다.

1-8. 변수의 종류

  • 멤버변수(=전역변수)
    : 클래스 안에서 선언된 변수로서, "클래스 블록범위 안"에서 유효하다.

  • 지역변수
    : 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
    그러므로 다른 메서드는 해당 변수를 인식하지 못한다.
    이 규칙은 조건, 반복문과 같은 블록 {}을 형성하는 모든 경우에 해당된다.

1-9. 메서드만의 포함하는 클래스

  • 객체 안에 멤버변수(=데이터)가 포함되지 않습니다.
  • 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로
    여러개의 객체를 생성할 필요가 없다.

2. 은닉성

2-1. 은닉성이란?

  • 멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법
  • 실수로 인한 오작동 방지를 위해
    클래스일부를 숨기는 처리를 말한다.

2-2. 적용방법

  • 변수의 이름이나 메서드이름 앞에 "접근한정자"를 지정한다.

    • public

      • 모든곳에서 접근가능, 일반적으로 모든 메서드앞에 명시한다.
    • private

      • "클래스 안에서만" 사용가능
      • 객체를 통해 접근할수 없다.
      • 일반적으로 모든 멤버변수 앞에 명시한다.
    • protected

      • 현재 클래스 내의 다른 자원(메서드나 변수 등)이나 같은 패키지안에 존재하는 클래스나 하위 클래스에서 접근가능
      • 잘 사용하지 않는다.
    • default

      • 접근 한정자를 명시하지 않은 경우 현재 클래스 내 다른 자원이나
        동일 패키지 내의 다른 클래스에서 접근가능
      • 잘 사용하지 않는다.

3. getter, setter 메서드

  • 멤버변수가 은닉된 형태로 선언된 경우
    프로그램의 가장 근본적인 목적인 데이터에
    접근하는 방법이 사라지므로 메서드를 통하여
    간접적으로 접근하는 방법이 마련되어야 한다.
  • getter, setter는 "은닉된 멤버변수에 간접적으로 접근하기 위하여" 정의된 메서드들을 의미하는 용어
    • getter
      : 은닉된 멤버변수값을 리턴하기 위한 메서드
    • setter
      : 파라미터로 전달된 값을 멤버변수애 복사하기 위한 메서드

3-1. 메서드 작성예

String userName;							// 멤버변수

public String getUserName(){				// getter
}
public void setUserName(String userName){	// setter
}


int userAge;								// 멤버변수

public int getUserAge(){					// getter
}
public void setUserName(int userName){		// setter
}

3-2. getter, setter 사용이유

  • 캡슐화

    • 접근 제한자는 객체지향의 캡슐화, 그리고
      그를 그를 통한 코드은닉화를 위한 도구이다.
    • 데이터를 외부로부터 숨기거나 접근을 막고
      또는 접근에 처리를 강제한다.
  • setter : 나이, 포인트 마일리지 관련 이슈사례

  • getter : 불필요한 데이터를 막기위해

  • 자바빈즈(JavaBeans)

    • 자바언어에서 사용하는 복합적 데이터 표현의 최소단위
      재사용 가능한 컴포넌트(구성요소)를 생성할 수 있다.
    • 자바빈즈 클래스로서 작동하기 위해서는 객체 클래스는
      명명법, 생성법 그리고 행동에 관련된 일련의 관례를
      따라야만 한다.
    • 클래스는 생성자를 가지고 있어야한다.
    • 클래스의 속성들은 get,set 메서드들을 사용해
      접근할 수 있어야한다.

3-3. 클래스에 접근한정자 지정한 경우

  • public : 객체 생성 가능하다.
    서로 다른 소스코드에 정의된 클래스끼리도
    객체 생성이 가능하다.
  • private : 클래스에 적용불가
  • protected : 클래스에 적용불가
  • default : 동일한 소스코드에 정의된 클래스끼리만
    객체로 생성 가능하다.

4. 클래스의 분리

  • 하나의 소스코드에서 프로그램 모든기능을 구현하게 되면
    유지보수에 비효율적이므로, 기능단위로 소스코드를 분리해야 한다
  • 다른패키지 내에서 소스코드가 분리된 클래스끼리는
    public이 명시되어야만 서로 객체생성가능하다
  • 일반적으로 클래스정의에는 public 접근 한정자만 사용할 수 있다.
  • 하나의 소스코드는 하나의 public 클래스만 존재할 수 있다.

5. 상속성

5-1. 클래스간에 상속

  • 클래스간에는 부모-자식의 상속관계를 설정할수있다.
  • 부모클래스A를 자식 클래스B가 상속받을때
    B는 A의 모든 멤버변수와 메서드를 자신의 것으로 상속받게 된다.
    (단, private로 설정된 기능은 상속되지 않는다)
  • 상속가능여부: public, protected
  • B는 A의 public, protected 기능들을 직접적으로 코딩하지
    않더라도 자신의 것으로 사용할 수 있게 된다.

5-2. 상속정의방법

  • extends키워드 사용하여 부모클래스 이름을 명시

    	public class 자식클래스 extends 부모클래스{...}

5-3. 클래스 다이어그램을 통한 상속의 표현

  • 클래스의 구조를 표현하는 클래스 다이어그램에서
    상속은 자식클래스가 부모클래스를 가리키는 화살표로 표현한다.
  • 상속관계가 이뤄질때 부모클래스를 "super 클래스"라고 한다.

5-4. 상속의 활용

  • 기존에 존재하는 클래스의 소스 수정없이 기능을 확장하고자 하는 경우
  • 클래스 다이어그램에서 CalcChild 클래스는 CalcParent클래스를 상속받기때문에 별도 소스코딩 없이도 plus() 메서드와 minus() 메서드를 포함하게 된다.
  • CalcChild클래스에 times()메서드와 divide()메서드를 추가하면, 상속받은 메서드에 새로운 기능을 추가하는 효과를 얻을 수 있다.
  • 여러개의 클래스에서 공통되는 기능을 추출하여 공유하기
profile
Quantum Jump to class for java….

0개의 댓글