본문 바로가기

공부/자바 OOP

5월29일 - Class

Class 클래스

내부 클래스(main함수안)- 안드로이드에서는 안씀 , 활용도면에서 높지않음

보통, package 밑에 만듬

 

c언어 : 구조체(struct) , 공영체(union)   ->변수로 구성되어있다.

JAVA  : class                                   ->변수와 함수로 구성되어있다.

 

자바클래스의 구성

멤버변수(field)+멤버함수(method)로 구성되어있다. 

오버로딩    : 함수명 중복가능

오버라이딩 : 

 

클래스 설계순서

field변수->constructor생성자->함수

 

클래스명 설정 : 의미를 부여, 첫글자는 반드시 대문자, 첫글자 소문자 숫자 안됨, 한글 및 공백 안됨

접근허용범위 Access Modifier 

-> 접근지정, 접근제어, 접근수정

↓주체에 따라 선택

-> private      : 비공개, 변수
-> package    : 기본값 , 생략가능 (이클립스루나이전버전엔 default라 부름) ,같은 폴더 내에서만 접근가능 

-> protected   : package와 public의 중간단계 , 다른 팩키지라도 상속관계에는 접근가능.

-> public       : 공개, 함수

 

Sungjuk 클래스는 package가 생략되어 있으므로 oop0529팩키지내에서만 접근가능

 

 

<RAM>

JAVA의 RAM안에 있는 메모리공간은 static heap stack이 있다

static
heap
stack

new연산자로 메모리가 할당한다는 의미는 해당 메모리 공간에서 필요한만큼 할당시키는 것이다. 이 공간의 이름이 객체

new라는 새로운 address가 생겼다고도 말할 수 있음.

다른 공간에 위의 address를 컨트롤할 수 있는 참조변수를 만들어 조종할 수 있음.

	public static void main(String[] args) {
		// class 클래스

		int a=3; // 정수형 a변수가 메모리 4byte할당
		
		//클래스는 메모리를 할당을 한 후 사용한다
		//new 연산자 : 메모리할당 연산자
		//new Sungjuk(); //메모리가 할당됨, 객체(Object)
		
		//kim -> #50번지를 참조하는 변수
		Sungjuk kim = new Sungjuk(); //객체이름 kim , 자료형 ; sungjuk 
		
		//lee -> #70번지를 참조하는 변수
		Sungjuk lee = new Sungjuk(); 
		
		//객체의 주소값, 램공간안에 할당되어있는 공간의 위치를 알수있다.
		System.out.println(kim.hashCode());
		System.out.println(lee.hashCode());
		
		int b=5;
		int c=b; //b가 가지고 있는 값을 c준다 
		
		Sungjuk park = lee; //70번지를 50번지에 준다, 자료형은 sungjuk이므로 적어줘야함 
		System.out.println(park.hashCode());


출력결과
366712642   //#50번지
1829164700  //#70번지
1829164700  //23줄에 있는 lee가 park에게 준 번지

super 부모님 

super의 엄마가 object

 

객체지향의 특징 : 특정 자료형을 은폐할 수 있다.

 

생성자 Constructor

생성자 함수(constructor) 

- new연산자와 함께 메모리를 할당하는 경우 호출

- 클래스명과 동일한 함수

- 기본 생성사 함수(default constructor) : 매개변수가 없다

기본 생성자 함수 ; 매개변수가 없다

- 기본 생성자 함수는 자동 추가된다. 

- 단, 기본 생성자 함수는 생성자 함수가 오버로딩이 되면 자동추가되지 않으므로

  강제적으로 선언할 것을 강추!

School 기본생성자함수에 주석을 걸면 에러뜬다
School 기본 생성자함수를 강제선언 해주라고 에러뜸

- 생성자함수도 오버로딩(overloading)이 가능하다 = 생성자함수가 여러개 올 수 있다.

생성자 함수도 오버로딩(overloading) 가능함.

- (주의!!)리턴형이 존재하지 않는다. 객체생성 불가능.

 

 

소멸자 함수(destructor)    : JAVA에는 없음

 

가비지 콜렉팅 (Garbage Collecting) 

- 자바가상머신(JVM)은 가비지 콜렉터리는 인스턴스 자동해제(메모리반환) 시스템을 가동시켜 필요한 메모리를

관리한다.

 

This

의미 : 자신의 클래스 멤버를 가리킴. 일반변수와 멤버변수를 구분하기 위함

This( )

의미 : 생성자 함수간의 호출

class Jumsu {  //package 생략. oop0529내에서만 접근 
	private String name="손흥민";
	private int kor,eng,mat;
	private int aver;
	
	public Jumsu(){} //default constructor 기본생성자함수
	public void disp() {
		String name="박지성"; //public 지역변수의 출력순위가 높음 
		System.out.println(name);       //일반 지역변수 
		System.out.println(this.name); //this .연산자 멤버변수를 가리킴
		
	}//disp() end
}//class end

출력결과
박지성
손흥민

name ; 지역변수  아무런 지칭없을 때는 public 

this.name ; 멤버변수 

 

이클립스 프로그램

기본생성자 자동 추가 :Source -> Generate constructor from superclass 

1. 생성자함수에 있는 매개변수 선택하기

2. super() 함수 불러내기 

 

기본클래스

 

자바의 기본팩키지, 생략가능하다

1) Math 클래스

 2) Integer 클래스 - 정수값

		Integer a =  new Integer(5);
		Integer b =  new Integer("7"); 
		
		System.out.println(a.toString());  //string으로 형변환되어 "5"
		System.out.println(b.intValue()); //int로 형변환되어 7
        
출력결과
5  //string형
7  //int형

integer클래스의 parseInt 매우 많이 나옴 

- string형을 정수형으로

		//integer- "4" -> 4 로 변환하기
		System.out.println(Integer.parseInt("4"));
		System.out.println("2"+"6");   //"26"
		System.out.println(Integer.parseInt("2")+Integer.parseInt("6"));
        
출력결과
4
26  //"26"
8

parseInt 에러발생

		//NumberFormatException발생
		//System.out.println(Integer.parseInt("soldesk"));
		
		//NumberFormatException발생
		//공백도 안됨 ㅋ 까다로워! 
		//System.out.println(Integer.parseInt("  7  "));

1. 문자열 안됨

2. 공백도 안됨 ㅋㅋㅋ ㅠ

 

3) String 클래스

String 클래스에서 가장 많이 쓰는 것

 

'공부 > 자바 OOP' 카테고리의 다른 글

5월31일 - Wrapper 클래스  (0) 2019.05.31
5월30일 - this() / static / final  (0) 2019.05.30
5월28일 - 메소드 + 정렬  (0) 2019.05.28
5월23일 - Method 메소드 ★매우 중요★  (0) 2019.05.23
5월 22일 - 배열 2+연습문제  (0) 2019.05.22