자바기초(객체지향)

bitna's study note·2022년 4월 10일
0

자바

목록 보기
36/119

4월 8일 내용정리

1.객체
속성(=멤버변수,필드) 예)사람-이름,키,나이...
기능(메서드,함수) 예)달린다. 뛴다, 먹는다...

2.객체간의 관계
-사용관계
-집합관계
-상속관계

3.객체 지향프로그래밍의 특징
(1)갭슐화(정보은닉)
객체의필드(멤버변수),메소드를 하나로 묶고 실제 구현하는 내용을 감추는 것
접근제한자를 사용해서 접근을 처리
*접근제한자:객체의 필드와 메소드의 사용범위를 제한함으로써 외부로부터 보호하는 역할

(2)상속(재사용성)
상위객체를 재사용해서 하위 객체를 쉽고 빠르게 설계할수 있도록 도와줌
이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여줌

(3)다형성
같은타입이지만 실행 결과가 다양한 객체를 이용할수 있는 성질
자바 다형성을 위해 부모클래스(상위클래스,슈퍼클래스,...)또는 인터페이스의 타입의 변환을 허용
다형성의 효과는 객체의 부품화가 가능

생물(부모클래스)
새,사자,물고기(자식클래스) 있음

move->새는 나는 걸로 move
move->사자는 뛰는걸로 move
move->물고기는 헤엄치는걸로 move

4.클래스
설계도 또는 붕어빵틀 로 생각하는게 좋음

접근제어자 class 클래스명{ 내용 }

5.클래스 주의점
-publi class 키워드는 클래스를 선언할때 사용하며 반드시 소문자로 작성
클래스 이름 뒤에는 반드시 중괄호{ }를 붙여준다.
-java 소스파일->클래스를 담고 있는 저장 단위일뿐 클래스 자체는 아님
하나의 소스파일 안에는 두개의 클래스를 생성할 수 있다.
-하나의 소스파일안에는 접근제어자(public)는 하나만 사용할수 있다.
-소스파일명과 동일한 클래스에만 접근제어자(public)를 붙일수 있다.

6.클래스 사용법
(1)클래스 작성(설계도, 틀)
(2)객체를 생성(new연산자로 객체를 생성(인스턴스)하고 객체를 초기화(생성자)
(3)객체를 사용

7.위에 식 참조
new연산자는 힙 메모리 영역에 객체를 생성시킨후, 객체의 주소를 리턴
참조타입클래스 변수이름 =new 참조타입클래스(); =>참조 변수에는 객체의 주소를 담는다, 참조타입클래스()는 생성자

8.클래스의 용도
라이브러리(=API) 라고도 하는데 다른 클래스에서 이용할 목적으로 만들어짐

9.클래스 실행용
프로그램을 실행할 진입점인 main()메서드를 제공하는 역할

10.클래스의 구성멤버
(1)필드(멤버변수,클래스 멤버 변수) 객체의 데이터가 저장되는 곳
(2)생성자: 객체 생성될때 초기화 역할담당, 객체를 사용할 준비, 리턴타입이 없다.
(3)메소드(함수):객체의 동작에 해당하는 실행블럭을 가지고 있으며 객체 간의 데이터 전달의 수단으로 사용, 외부로부터 매개값을 받을수도 있고, 실행한 후 어떤값을 리턴할 수도 있다.

11.인스턴스변수
인스턴스가 만들어 질때 같이 메모리에 올라가는 변수들..클래스안에 선언됨

12.지역변수
메서드안에 선언되는 변수로 메서드안에서만 활동

13.생성자는 new연산자와 같이 사용되며 클래스로부터 객체를 생성할때 객체의 초기화를 담당한다.
객체를 초기화란? 필드를 초기화 ,메서드를 호출해서 객체를 사용할 준비를 하는 것

14.생성자를 실행시키지 않고 클래스로부터 객체를 만들 수 없음

15.힙영역에 객체가 생성되고 주소를 리턴한다.

16.기본생성자[public]클래스( ){ }->컴파일러가 만들어줌
생성자가 하나라도 있으면 자동적으로 안만들어 지므로 필요시 기본생성자를 써줌, 또는 privit으로 만들고 싶을때 생성자를 직접 써줌
왜냐면 자동적으로 만들어 지는것은 public이므로
접근제어자 클래스(매개변수선언...){ 객체를 초기화 코드 }

참조클래스-01

package study_0408;

public class person {
	
	//필드선언
	/* 생성자의 매개값을 이용하여 초기값 설정안할시 필드에서 타입과 변수명=값 을 넣어서 선언해 줄수있음
	 *  String name="홍길동";
	 *  int height=170;
	 *  int weight=80;
	 */
	
	//메인에서 각필드 내용을 써줄때는 아래와 같이 타입과 변수명만 선언
  String name;
  int height;
  int weight;//이렇게 값을 안넣어주면 자동적으로 기본값으로 선언됨. 
  			//그러나 지역변수는 자동적으로 기본값을 안넣어주기 때문에 내가 초기화 해줘야함
  
  //생성자 선언
  //생성자를 컴파일러가 자동적으로 public person(){};를 생성해줌
  
  //메서드
}

메인클래스-01

package study_0408;

public class person_test {

	public static void main(String[] args) {
		// 객체를 생성(인스턴스)
		person hong =new person();
		
		hong.name="홍길동";
		hong.height=170;
		
		System.out.println(hong.name);
		System.out.println(hong.height);
		
		hong.weight=80;
		System.out.println(hong.weight);
		
		person a =new person();
		a.name="김자바";
		a.height=150;
		a.weight=50;
		System.out.println(a.name);
		System.out.println(a.height);	
		System.out.println(a.weight);
	}

}

참조클래스-02

package study_0408;

public class person_01 {
	//필드선언
	  String name;
	  int height;
	  int weight;
	  
	 //생성자
	  public person_01() {};//기본생성자 아래에 생성자를 만들어서 기본생성자가 자동으로 안만들어지므로
	  //필요할때 내가 직접 만들어 줘야하고
	  //메인클래스에서 person_01 kim=new person_01(); 이렇게 매개값이 없는 기본생성자를 호출했기때문에 써줌거임
	  //아래 매개변수가 있는 생성자는 해당이 안되기 때문
	  
	  //매개변수타입이 다르거나 개수가 다르거나 순서가 다르면 '생성자오버로딩'이 일어남
	  public person_01(String n, int h, int w) {
		  name=n;
		  height=h;
		  weight=w;
	  }
}

메인클래스-02

public class person_test_01 {

	public static void main(String[] args) {
		
		
		person_01 kim=new person_01();
		person_01 hong=new person_01("홍길동",170,80);
		person_01 park=new person_01("박자바",150,50);
		
		// TODO Auto-generated method stub

	}

}

참조클래스-03

package study_0408;

public class student {

	int hakbun;
	String name;
	int grade;
	
//    public student(int h, String n, int g) {
//        hakbun = h;
//        name = n;
//        grade= g;
	
// 아래와 같이 하면 컴터가 제일가까운 관계기준으로 인식하기 때문에 지역변수로 인식하고 값이 이상하게 나옴
//  public student(int hakbun, String name, int grade) {
//  hakbun = hakbun;
//  name = name;
//  grade= grade;	
	
	
//위에 지역변수로 인지하는것을 해결하기 위해 this를 붙여줌, this는 현재 작업하고 있는 클래스의 필드다!!
	
  public student(int hakbun, String name, int grade) {
	  this.hakbun = hakbun;
	  this.name = name;
	  this.grade= grade;
     };
     
//여러 경우의 수를 대비하여 세팅값을 여러가지로 만듬

//아래는 매개변수없을때 대비한 세팅값
     public student() {};

//아래는 hakbun만 필요할때 대비한 세팅값
     public student(int hakbun) {
   	  this.hakbun = hakbun;
        };
//아래는 hakbun,name만 필요할때 대비한 세팅값        
        public student(int hakbun, String nam) {
      	  this.hakbun = hakbun;
      	  this.name = name;
           };
/*생성자 오버로딩
 * 1.이름이같음
 * 2.매개변수개수x
 * 3.매개변수타입x
 * 
 * public student(int h, String n, int g) {
        hakbun = h;
        name = n;
        grade= g;
 * 
 *  public student(int hakbun, String name, int grade) {
	  this.hakbun = hakbun;
	  this.name = name;
	  this.grade= grade;
     };
 * 
 * 위에는 에러가 남 왜냐면 JVM이  
 * public student(int h, String n, int g)
 * public student(int hakbun, String name, int grade)
 * 타입이 같기 때문에 JVM이 어디로 처리할지 몰라서 에러를 떨어트림
 */
  
     
}

메인클래스-03

package study_0408;

public class studentTest {

	public static void main(String[] args) {
		
		student hong =new student(123,"홍가",70);
		student kim =new student(124,"김가",80);
		student choi =new student(125,"최가",95);
		student pack =new student(126,"박가",50);
		
		System.out.println(hong.name);
		System.out.println(kim.name);
		System.out.println(choi.name);
		System.out.println(pack.name);
		System.out.println();
		System.out.println(hong.hakbun);    
        

	}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보