태그
#JAVA
JAVA - class
2021년 6월 6일 10:44

java를 하는 이유는 객체 지향 프로그래밍이기 때문이다
class를 나가기 전에 객체 지향에 대해서 조금만 알아보겠다
객체 지향 프로그래밍 (OOP : Object ORiented Programming)
- 객체 중심의 프로그램을 작성하는 방식
- 객체 끼리의 상호 작용을 통하여 프로그램을 작성하는 방식
Class 구성 요소
- 멤버 필드 (변수) : 데이터를 저장하는 역할
멤버 변수 -> private Stirng name; private int age; - 멤버 메소드 : 코드를 저장하는 역할
void 이름 (매개변수) {코드}
public void setData(String name, int age){}
( 멤버 필드의 setter getter)
- 생성자 -> 객체가 생성될 때 처음으로 한 번 실행되는 것 (디폴트 생성자, 사용자 생성자)
- 중첩 클래스 : 클래스 안에 클래스가 있는 것
정의
- 객체 (Object)
- 사전적인 의미로는 현실 세계에 존재하는 모든 것들
- 어떤 대상을 표현하기 위한 정보(속성)을 저장할 수 있는 공간과 그 공간을 컨트롤 할 수 있는 기능 (메소드)을 하나의 루틴으로 묶은 개별적인 개체로써 표현되는 변수
- 클래스라는 사용자 정의 자료형으로 만들어진 변수
- 클래스
- 어떤 대상을 표현하기 위한 정보(속성)을 저장할 수 있는 공간과 그 공간을 컨트롤 할 수 있는기능 (메소드)을 하나의 블록으로 묶어서 정의한 사용자 정의 자료형
- 클래스 구성요소
- 속성 + 기능 + 보안 (정보은닉)
- 멤버 변수 + 멤버 메소드 + 접근지정자 = class (사용자 정의 자료형)
- 클래스의 형식
class 클래스명 {
멤버변수 : 데이터를 저장하는 공간
멤버 메소드 : 클래스의 기능을 정의한 코드의 집합
- 생성자 : 객체 생성시 객체를 준비하기 위한 멤버 메소드
- getter : 멤버 변수의 값을 변환 받기 위한 메소드
- setter : 멤버 변수의 값을 셋팅하기 위한 메소드
- user 메소드 : 사용자 필요에 의해 만들어지는 메소드
}
접근지정자(접근제한자)
-
정보은닉을 사용하기 위해서 사용되는 키워드
-
내가 원하든 원하지 않든 자동으로 적용된다
-
종류
- private (main 접근 불가)
- 클래스 내부에서만 접근 가능하고 외부에서는 모두 접근 불가
- 일반적으로 별다른 제약 없으면 멤버 변수는 private 으로 설정한다
- protected (main 접근 불가, 상속받지 않은 클래스도 접근 불가)
- 상속받은 클래스에서는 접근 가능하고 그 외 외부에서는 모두 접근 불가
- 같은 패키지라면 접근 가능
- package(default)
- package만 같으면 모두 접근 가능, main 접근가능
- 접근 지정지의 디폴트 값
- 내가 접근지정자를 적지 않으면 자동으로 적용되는 지정자
- 패키지 내부에서만 접근이 가능하도록하는 지정자
- public (main 접근 가능, package가 달라도 접근 가능)
- 클래스 내부와 외부에서 모두 접근 허용
- 다른 패키지에서 클래스를 import를 통하여 접근이 가능하다
- 일반적으로 별 다른 제약 없으면 멤버 메소드는 public으로 설정한다
- private (main 접근 불가)
setter
- 멤버 변수의 값을 셋팅하는 메소드 ex) setDate() 메소드
- 일반적으로 매개변수명은 멤버 변수명과 동일하게 작성한다 ex) int etAGe() void setAGe()
- 상황에 따라서는 멤버변수명의 앞에 _(언더 바)를 붙이거나 줄임말을 사용하기도 한다
- 형식
- void set멤버변수명(매개변수){코드정의} , 멤버변수 : String name, int age
getter
- 멤버 변수의 값을 반환하는 메소드
- 형식
- 자료형 get 멤버변수명() {코드정의 return 멤버변수;}
객체 생성과정
- 공간 할당 -> 생성자 호출
생성자
- 객체 생성시 호출하는 메소드
- 객체를 준비할 때 사용된다, 주로 멤버 변수 초기화를 할 때 이용한다
- 생성자는 객체 생성시에만 단 한 번만 호출 할 수 있다
- 우리가 생성자를 정의 하지 않으면 자동으로 생성자가 만들어진다 (디폴트 생성자)
- 생성자 안에서 다른 생성자를 호출 할 수 있다 (this.매개변수)
형식
- 반환 자료형은 존재하지 않는다, 반환값이 없다
- 메소드명은 반드시 클래스명과 동일하여야한다
- 매개변수를 가질 수 있다, 오버로드가 가능하다, 여러 개가 존재할 수 있다
- 객체 생성시 상황에 따른 객체를 생성하기 위해 여러 개를 정의한다
클래스명 (매개변수) {
코드정의;
}
디폴트 생성자
- 객체 생성 과정의 순서 유지를 위해서 자동으로 만들어진다
- 코드가 존재하지 않는다, 기능이 없다
- 생성자를 하나라도 정의하면 디폴트 생성자는 만들어지지 않는다
클래스명() {
}
class Info
//코드의 재사용
//.(멤버 참조 연산자)
//- 클래스의 멤버를 참조(호출)하는 연산자
//- 클래스의 멤버를 사용하려 할 때 사용하는 연산자
public class Info {
//멤버 변수
//- 클래스의 ㅣ저장될 데이터 공간들
//- 공간을 선언 하듯이 정의하면 된다
String name;
int age;
//생성자 - 나중에
//멤버메소드
//메소드 - 한가지의 기능을 수행하고자 만드는 코드의 집합
//- 형식
// 반환 자료형 메소드명(매개변수){코드 정의}
//void : 반환 자료형 메소드명 : setData 매개변수 : (String _name, int _age)
void setData(String _name, int _age) {
name = _name;
age = _age;
}
void disp() {
System.out.println("이름 : "+name);
System.out.println("나이 : "+age);
}
int getAge() {
return age; //리턴하는 자료형과 반환 자료형은 일치 하여야한다
}
String getName() {
return name;
}
//메소드명 - 메소드를 호출 할 때 사용하는 이름
// - 첫글자는 소문자 달라지는 단어의 첫글자는 대문자로
// - 메소드의 기능이 연상되는 단어로
//반환 자료형
// - 메소드가 실행하고 나서 종료될 때 돌려주는 값의 형태를 적는 부분
// - 메소드가 실행하고 난 후에 나오느 결과물
// - 반환값이 없으면 void 반환값이 있으면 값의 형태에 따라 자료형을 적으면 된다
// - 반환값은 반환 자료형과 일치 되어야한다.
//return
// - 메소드 종료
// - 반환값이 있으면 return 뒤에 적으면 값이 반환된다
//매개변수
// - 매개변수는 메소드를 실행할 때 가지고 시작해야 할 값의 형태를 적는 부분
// - 메소드의 실행 재료
// - 매개변수의 개수 자료형 순서는 상관없다
// - 형식
// - 반드시 자료형과 매개변수명은 한세트여야한다
// - 여러개일 경우는 , 를 통해 구분지어주면 된다
// (자료형 매겨변수면, 자료형 매개변수명)
//----------------------------------------------------------
//접근지정자 (접근제한자)
// - 정보 은닉을 사용하기 위해서 사용되는 키워드
// - 내가 원하든 원하지 않든 자동으로 적용된다
//종류
// - private
// :클래스 내부에서만 접근 가능하고 외부에서는 접근 불가
// :일반적으로 별다른 제약 없으면 멤버 변수는 private으로 설정
// - protected
// : 상속받은 클래스에서는 접근 간으하고 그 외 외부에서는 모두 접근 불가
// : 같은 패키지라면 접근 가능
// : 상속에서 다시...
// - package(default)
// : 접근 지정자의 디폴트 값
// : 내가 접근 지정자를 적지 않으면 자동으로 적용되는 지정자
// : 패키지 내부에서만 접근이 가능하도록 하는 지정자
// - public
// : 클래스 내부와 외부에서 모두 접근 허용
// : 다른 패키지애서 클래스를 import를 통하여 접근 가능
// : 일반적으로 별 다른 제약 없으면 멤버 메소드는 public으로 설정한다
//----------------------------------------------------------
//setter
// - 멤버 변수의 값을 세팅하는 메소드 ex)setData()메소드
// - 일반정으로 매개변수명은 멤버변수명과 동일하게 작성한다 ex) int getAge()
// - 상황에 따라서는 멤버 변수명의 앞에 _를 붙이거나 줄임말을 사용하기도 한다
//- 형식
// :void set멤버변수명(매개변수){코드정의} //멤버변수 : ex) String name, int age
//getter
// - 멤버 변수의 값을 반환하는 메소드
//- 형식
// : 자료형 get멤버변수명(){코드정의 return멤버변수;}
//-----------------------------------------------------------
//객체 생성과정
// - 공간 할당 -> 생성자 호출
//생성자
// - 객체를 생성시 호출하는 메소드
// - 객체를 준비할 때 사용된다 주로 멤버 변수 초기화를 할 때 이용한다.
// - 생성자는 객체 생성시에만 단 한 번만 호출 할 수 있다
// - 우리가 생성자를 정의하지 않으면 자동으로 생성자가 만들어진다 - 디폴트 생성자
// - 생성자 안에서 다른 생성자를 호출 할 수 있다. this
//형식
// 1. 반환 자료형은 존재하지 않는다. 반환값이 없다
// 2. 메소드명은 반드시 클래스명과 동일하여야한다.
// 3. 매개변수를 가질 수 있다, 오버로드가 가능하다, 여러개가 존재한 수 있다
// - 객체 생성시 상황에 따른 객체를 생성하기 위해 여러개를 정의한다.
//클래스명(매개변수){
// 코드정의;
//}
//---------------------------------------------------------
//디폴트 생성자
// - 객체 생성 과정의 순서 유지를 위해서 자동으로 만들어진다
// - 코드가 존재하지않는다, 기능이 없다
// - 생성자를 하나라도 정의하면 디폴트 생성자는 만들어지지 않는다
// 클래스명(){
//
//}
}
class Main
public class Main {
public static void main(String[] args) {
Info in = new Info();//객체를 만드는 과정
Info in1 = new Info();
in.setData("홍채민", 19);
in1.setData("홍채민", 9);
in.disp();
in1.disp();
System.out.println(in.getName() + in1.getName());
}
}
ex )
class ex01
public class Ex01 {
public static void main(String[] args) {
// 의식의 흐름
// 객체로 만든다. 인스턴스 화 한다
ScoreData sd1 = new ScoreData();
// 필드에 값 넣기
sd1.score = 85;
sd1.subject = "국어";
sd1.ranking = 7;
// 필드 값 출력하기
System.out.println(sd1.score);
System.out.println(sd1.subject);
System.out.println(sd1.ranking);
sd1.printScoreInfo();
}
}
class ScoreData
// 설계도 (붕어빵 틀)
public class ScoreData {
// 속성 : 멤버변수, 필드 (field)
int score;
String subject;
int ranking;
// 행위 : 메소드 (method)
public void printScoreInfo() {
System.out.println("점수 : " + this.score);
System.out.println("과목 : " + this.subject);
System.out.println("순위 : " + this.ranking);
}
}
public class Main {
//메소드의 오버로드
// - 객체지향 언어의 메소드의 참조 방식은 메소드명과 *매개변수까지 인식*한다
// - 메소드명의 중복정의
// - 같은 기능이라면 하나의 이름으로 통합적인 처리를 위해 사용한다
// - 오버로드의 조건
// - 반환 자료형은 오버로드의 조건에 해당되지 않는다(getter는 해당 X)
// - 매개변수의 개수 순서 자료형 셋 중에 하나라도 다르면 오벌도의 조건에 해당된다
public void disp(int a) {
System.out.println("a ="+a);
}
public void disp(int a,double b) {
System.out.println("a ="+a);
}
public void disp(double a,int b) {
System.out.println("a ="+a);
}
public void disp(double a) {
System.out.println("a ="+a);
}
public void disp(char a) {
System.out.println("a ="+a);
}
public void disp(String a) {
System.out.println("a ="+a);
}
public static void main(String[] args) {
Info in = new Info("홍길동",13);//이름 나이 생성자
in.disp();
Info in1 = new Info("홍길동");//이름만 넣어서 이름생성자
in1.disp();
Info in2 = new Info();//값을 넣지않아서 디폴트생성자
in2.setData("홍길동", 15);
in2.disp();
Main ma = new Main();
ma.disp("a");
ma.disp('a');
ma.disp(20);
ma.disp(0.36, 45);
}
}