객체지향 언어
현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며,
발생하는 모든 사건들은 객체간의 상호작용이다
이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.
현실에서 객체란 ?
자신의 속성(값, DATA)과 기능(동작, 행동)을 다른 것들 과 구분되어 식별 가능한 것
자바에서 객체란 ?
클래스에 정의된 내용대로 NEW연산자를 통해 메모리 영역에 생성된 것
클래스(class)
객체의 특성(속성, 기능)에 대한 정의를 한것
ex) 제품의 설계도
객체의 추상화
유연성을 확보하기 위해 구체적인 것은 제거한다는 의미
작성하려는 클래스중
프로그램에서 필요한 공통점을 추출하고 , 불필요한 공통점을 제거하는 과정
클래스 작성방법
public class Student {
// 1. 필드부
// 접근제한자 [예약어] 자료형 변수명;
private String name;
private int kor;
private int math;
private int eng;
// 2. 생성자부 : 객체를 생성하기 위한 일종의 메소드
// 접근제한자 클래스명([매개변수]){}
public Student() {}
// 3. 메소드부 : 기능을 구현하는 부분
// 접근제한자 반환형 메소드([매개변수]) {}
}
1. 필드부 : 그동안 배운 변수를 적는 부분이다 필드부의 변수는 멤버변수라고 많이 작성한다.
- 접근제한자 : public - 어디서든 접근할수있음
protected - 자신의 패키지와 조상 클래스까지
default - (기본 제한자) 같은 패키지의 클래스만
private - 같은 class의 멤버만 사용할수있다.(데이터를 감춰야할때 주로사용된다.)
- [ 예약어 ] - static final abstract 같은 예약어 들이 들어간다 아직은 배우지않았으므로 그냥 그런갑다한다..
2. 생성자부 : 객체를 생성하기 위한 일종의 메소드 추후에 배우면 작성예정
3. 메소드부 : 기능을 구현하는부분, 다른언어 자바스크립트등을 했다면 함수같은기능
객체 사용방법
객체 혹시 인스턴스라고 많이들 부른다.
위에작성하였던 Student 클래스의 멤버변수, 메소드 등을 사용할려면일단
객체를 생성하여야한다.
Student.class
(학생 정보를 담을클래스)
// 학생을 추상화해서 만든 클래스
public class Student {
// 필드부
// 접근제한자 [예약어] 자료형 변수명;
public String name;
public int kor;
public int math;
public int eng;
// 생성자부
// 메소드부
}
Main.class
(main으로 사용할 클래스)
// 클래스를 만들어 객체를 생성하는 방법
// 클래스를 만들고 자바에서의 객체(인스턴스) 로 생성하기위해서는
// new 키워드를 통해 Heap영역에 객체를 생성한다
// 참조타입 참조변수 = new 참조타입();
Student st = new Student();
// 객체 new 키워드이용하여 생성하고 멤버변수 접근하여 수정 및 값 가져오기
// 직접 접근을 통해 값 초기화
st.name = "홍길동";
st.kor = 100;
st.math = 60;
st.eng = 50;
// 접 접근을 통해 값 가져오기
String str = st.name + "님의 국어 점수는 " + st.kor + "이고, 수학 점수는 " + st.math +
"이고, 영어점수는 " + st.eng + "입니다.";
System.out.println(str);
// 혹은
// System.out.println(st.name + "님의 국어 점수는 " + st.kor + "이고, 수학 점수는 " + st.math +
// "이고, 영어점수는 " + st.eng + "입니다.");
// 객체생성은 갯수는 상관이없다 자신이 생성하고싶은만큼 생성해서 사용하면된다.
// 이순신 Student 객체 생성하기
Student st2 = new Student();
st2.name = "이순신";
st2.kor = 90;
st2.math = 20;
st2.eng = 80;
System.out.println(st2.name + "님의 국어 점수는 " + st2.kor + "이고, 수학 점수는 " + st2.math +
"이고, 영어점수는 " + st2.eng + "입니다.");
캡슐화
추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법
클래스의 가장 중요한 목적인 데이터의 접근제한을 원칙으로 하여,
클래스 외부에서 데이터의 직접 접근을 막고,
대신 데이터를 처리하는메소드를 클래스 내부에 작성하는 방법
기능을 이용한 데이터 간접접근
캡슐화의 원칙
- 클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.
- 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을 클래스 내부에 작성한다.
- 멤버 함수는 클래스 밖에서 접근할 수 있도록 public으로 설정한다
캡슐화를 왜 사용하는지
만약 은행의 자신의통장이있는데, 통장잔고가 10000원 이 예금되어있다.
하지만 어느날 30000원의 돈이필요해서 출금을하였는데 출금이되면 통장잔고는 -20000원이 되어버린다 ..
마이너스 통장이 아니고서야 있을수없는일이다 ..
이런상황을 막고자 또는
사용하는 사람들이 접근해서 금액을 수정할수있으면 안되고, 정해진 장소 로직에서의 그기능을 사용할수있게끔 은닉해야할때 많이사용된다.
/* 캡슐화
* 1) 정보 은닉(private)
* 추상화를 통해 선정된 속성들(멤버 변수)에 외부로부터 직접 접근을 막기 위해
* private 접근 제한자 사용
*
* 2) setter/getter 메소드
* 간적적으로 접근하여 값을 기록하고 조회해오는 메소드를 추가해야함
*/
public static void main(String[] args) {
// Student 클래스를 통해 객체 생성
Student st = new Student();
// 객체의 값 설정 (setter 호출)
st.setName("홍길동");
st.setKor(100);
st.setMath(80);
st.setEng(80);
// 객체의 값 알아오기 (getter 호출)
System.out.println("이름 : " + st.getName());
System.out.println("국어 점수 : " + st.getKor());
System.out.println("수학 점수 : " + st.getMath());
System.out.println("영어 점수 : " + st.getEng());
// 성적 정정
st.setKor(50);
// 한 번에 필드 값을 출력하기 위해 information 호출
System.out.println(st.information());
}
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - 객체(3편) (0) | 2021.05.24 |
---|---|
JAVA - 객체(2편) (0) | 2021.05.24 |
JAVA - 2차원 배열 (0) | 2021.05.23 |
JAVA - 배열 (0) | 2021.05.18 |
JAVA - 반복문(for, while), 분기문(break, continue) (0) | 2021.05.14 |