독개

클래스,생성자,인스턴스맴버,정적맴버,final,상수

by #독개#

JAVA 클래스

 

 

 


객체지향 언어란?

 

  • 기존 프로그래밍 언어에 몇가지 규칙을 추가한 것
  • 소스코드 재사용성이 높음 - 소스코드 중복 제거
  • 소스코드 관리의 효율성이 높음 (걍 C언어 소스코드분할처럼 클래스로 다분할가능)
  • 신뢰성이 높은 개발이 가능함 - 제어자와 메소드를 이용하여 데이터 보호
 

클래스 (설계도)

  • 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
  • 접근 제한자에 의해 접근제어가 가능 (default, public, protected, private)

비교

  • 변수 : 하나의 데이터를 저장 할 수 있는 공간
  • 배열 : 같은 타입의 여러 데이터를 저장 할 수 있는 공간
  • 리스트 : 다른 타입의 여러 데이터를 저장 할 수 있는 공간 (배열확장판)
  • 구조체 : 타입에 관계없이 서로 관련된 데이터를 저장할 수 있는 공간
  • 클래스 : 데이터와 함수의 결합 (구조체 + 함수)
 

객체/인스턴스 (제품)

  • 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고한다.
  • 하나의 클래스(설계도) 로부터 여러개의 인스턴스(제품)를 만들 수 있다.

자바식별자 작성 규칙 : 변수,클래스 동일

 

 

 

 

new 연산자  //  new 클래스();

 

  • 하나의 클래스(설계도) 로부터 여러개의 인스턴스(제품)를 만들 수 있다.

 

s1, s2는 Student자료형의 변수임(객체Student의 주소를 담을수 있음.

s1변수가 Student 객체를 참조합니다.

 

 

클래스의 구성 맴버

 


 

 

 

 
 

생성자 (constructor)

  • 인스턴스화 될때 호출 되는 초기화 메소드 (인스턴스화 할때 변수초기화 하거나 수행할 작업에 사용함)
  • 모든 클래스는 하나 이상의 생성자가 있어야함 (없으면 컴파일시에 컴파일러가 기본값을 만들어줌)
  • 인스턴스시 생성자는 여러개 있어도 딱1개만 불러온다
 
조건
  • 클래스 이름과 동일 해야 하며 매개변수를 사용할 수 있음
  • 리턴값이 있으면 안됨 (void,int,String이런 자료형붙이지말것 클래스와 동일한 접근제어자만 붙임)
 
Public class Test{
 
int val;
 
///// 아무것도 없으니 컴파일시에 Public Test() { } (기본생성자)를 만들어서 실행시키고 객체생성
}
 
 
생성자 메소드는 매개변수를 받을수도있음, 오버로딩도 가능

개발자가 선언한 생성자가 있을 경우, 컴파일러는 기본 생성자를 만들어 주지 않는다.

 
Public class Test{
 
Public Test(int a, String color) {} 이렇게 적어주면 생략된 기본생성자는 컴파일러에서 자동 생성안해줌.
 
}
 
 
Test a =new Teat(); //하면 에러가나는거지
 
Test a =new Teat(1 , "그랜저"); //이렇게 해야만하지
 
 
둘다쓰고 싶으면 반드시 매개변수생성자,기본생성자 둘다 만들어줘야한다.
 
 
 
 
c++가면 소멸자라는 것도 있다.
 

 

 

생성자로 매개변수 받아와서 필드값 초기화

 

 

생성자 오버로딩

 

  • 매개변수의 개수 또는 타입이 달라야 함
Car(String model, String color) { }
 
Car(String color, String model) { }
 
오버로딩이 아닌 이유 : 변수이름은 상관없다. 결국 String , String 으로 타입과 개수가 동일하잖아 그래서안됨!!

 

 

다른생성자 호출 this()

                                      중복코드 발생

 

                                        중복코드 개선안

 


인스턴스멤버 vs 정적멤버 (static)

정확히 말해서 필드는 객체안에 있지만 메소드는 객체영역 안에 있는게아니라 메소드영역에 따로 저장되있다. 이걸 호출해 오는것이다.

그런데 그냥 객체안에 필드,메소드 다 있다고 생각하는게 초보들이 이해하기엔 쉽다.

 


 

 

 

정적맴버는 클래스가 메모리로 로딩이 될때 자동적으로 메소드영역으로 올라간다. 조정불가능

 

인스턴스호출 : 인스턴스화 -> 참조변수.변수,메소드명

정적맴버호출 : 클래스이름.변수,메소드명

 

약간 말로 풀어서 설명을 좀하자면 우리가 jar파일을 딱 읽어오면 이제

아~~ 이런 클래스파일들이 있고 이런이런 정보들이구나 라는걸 이제 보관하고 있겟지

그때 각 클래스안에 있는 Static 된 클래스변수나 클래스메소드를 Data영역(메소드 영역)으로 쫙 보내둔다고

나머지는 인스턴스화할때 Heap영역에 할당한다

이런느낌임 ~ 오키도키?ㅋㅋㅋ

 

 

 




 

이게 무슨말이냐면

static int a ;

static String b;

이런식의 간단한 것들은 static해서 적어주면 되는데 만약에 for,if등 복잡한문을 통해서 계산한다음 static처리가 되어야(메소드영역) 한다면

이건 static블록 처리해서 안에 다넣어줄수 있단말이다.


 

 


 

싱글톤(Singleton) :하나의 어플리케이션 내에서 단 하나만 생성되는 객체

학원에서 안배웠는데 이것이 자바다 - 6.10 정적 멤버와 static(2) 11:53초에 강의에있네 필요하면 보자

 

 

final

  • 딱한번 초기값 지정한 후 부터는 변경 불가능
  • final 필드에서 선언과 동시에 초기화가능 (이후 변경불가)
  • 생성자를 통해서 받아서 초기화가능 (이후 변경불가)

 

상수(static final)

 

 


 

this

this참조변수

  • 현재 클래스의 인스턴스 변수를 참조할때 사용한다
  • 현재 클래스의 인스턴스 주소가 저장되어있음
 
Class Test {
 
String name;
int age;
 
Data() {
String name;
int age;
 
this.name = "kkk"   //전역변수를 말함 (인스턴스변수)
name = "abc"        //지역변수를 말함
 
걍 뭔느낌이냐면 지역변수와 인스턴스변수의 이름이 같을때! 인스턴스 변수를 메소드 안에서 구분지어 쓰고싶을때!
 
static에서 사용불가
 
this() ; 이건 이클래스의 생성자를 의미함
this(1,2); 만약 매개변수있는 생성자일때

 

 

맴버간 메소드 호출과 변수접근

-한개의 클래스 메소드(static메소드) 에서 인스턴스 필드를 쓰고 싶으면 static화 해줘야 쓸수잇음
 
뭔말이냐면 static메소드로 쓸라면 인스턴스 필드도 static된것만 쓸수있단거다.
static메소드는 인스턴스화 안하고 쓰는데 어떻게 인스턴스화 하지도 않았는데 객체 내부의 변수를 쓰냐 이말이지
data영역(메소드영역)에 올려야지
 
ex)
 
public class Test {
 
int a = 0;
static int b = 0;
 
void call()
{
System.out.println(a);    //사용가능
System.out.println(b);    //사용가능
}
}
 
But
 
public class Test {
 
int a = 0;
static int b = 0;
 
static void call()
{
System.out.println(a);    //에러!!
System.out.println(b);    //사용가능
}
}
 
 

클래스용도

  • 라이브러리(API : Application Program Interface) : 자체적으로 실행되지 않으나, 다른 클래스에서 이용할 목적으로 만든 클래스
  • 실행용 : main() 메소드를 가지고 있는 클래스로 실행할 목적으로 만든 클래스
  • 1개의 어플리케이션 = (1개의 실행클래스) + (n개의 라이브러리 클래스)

 

 

'🔥 프로그래밍 학습 > JAVA' 카테고리의 다른 글

추상화 클래스 , 인터페이스  (0) 2020.05.25
자바 분석할것2  (0) 2020.05.25
JAVA 클래스와 메소드2 (상속)  (0) 2020.05.24
로또번호 6개 다른값뽑기  (0) 2020.05.22
JAVA 기초  (0) 2020.05.21

블로그의 정보

독한 개발자

#독개#

활동하기