object oriented progaming
특정한 기능을 가진 녀석을 만들어서 그 기능을 사용하는 것
고유의 기능과 값을 가진 녀석(변수 + 함수)
어떤 객체의 종류, 객체를 만드는 틀
클래스 선언 방법
class 클래스명 {
필드;
메서드();
}
나만의 객체를 만들어서 사용
public class Main {
public static void main(String[] args) {
//객체지향프로그래밍(OOP) - 객체 위주로 프로그래밍을 한다
//객체 : 고유한 기능과 값을 가진 녀석(변수 + 함수)
//class : 객체의 종류
//OOP는 이런 객체들을 필요할 때 만들어서 기능을 사용하여 프로그래밍하는 방식
//자바에선 자주사용될 기능들을 만들어 설계해둠
//이런 설계도 파일들을 class라 부르며 2000여개 정도 존재
//이런 class들을 Java System Library (API)라고 부름
//아무리 2000여개가 있더라도 내가 원하는 모든 기능이 모두 있지는 않음
//개발자가 기능을 만들어야하는 경우도 있음
//이를 사용자 정의 클래스라고 부름
//class 만드는 방법 - 4가지 위치
// 1) 별도의 .java문서에 만들기
//개발자가 정의한 클래스를 이용하여 객체 생성
Second sec = new Second();
sec.a = 10; //멤버변수 사용
sec.aaa(); //멤버함수 사용
// 2) 하나의 .java문서안에 여러개 class 설계
Third tid = new Third();
tid.a = 44;
tid.show();
// 3) class안에 또 다른 class 설계하기 - inner class
// second클래스 안에 설계된 Hello inner class
//Second.Hello h = new Second.Hello(); //이너클래스는 객체생성 불가
// 4) 함수(메소드)안에 class를 설계하기 - 지역클래스
}
}
//사용자 정의 클래스
public class Second { //하나의 자바문서는 class와 파일명과 같아야하는데 안에 여러 class가 있으면 pulbic 이 있어야함
//클래스는 멤버변수(필드)와 멤버함수(메소드)로 구성
//멤버변수
int a;
//멤버함수
void aaa() {
System.out.println("Second aaa method...");
//4. 함수 안에 다른 클래스 설계- 지역클래스
class Nice { //이 지역이 끝나면 class는 없어짐
int a;
void show() {
System.out.println("Nice show mrthod");
}
}
}
//클래스 안에 다른 클래스 설계하기
//inner class라고 부름
class Hello{
int a;
void show() {
System.out.println("Hello show mrthod");
}
}
}//Second
//또 다른 클래스 선언
class Third{
int a;
void show() {
System.out.println("Third shdw method");
}
} // .java -> 컴파일 -> .class(컴파일은 class단위로 한다 -하나의 파일에 class 2개 넣으면 컴은 2개로 봄)
클래스를 관리하는 물리적인 방법
=> 패키지를 나누면 같은 이름의 class를 만들어 사용할 수 있다
import java.util.Random;
import java.util.Scanner;
import aaa.Person;
import bbb.Student; //bbb클래스 안에 Student클레스를 편하게 사용하도록 미리 불러오기
//import aaa.Student; //오류 같은 이름 둘다 import는 불가
import bbb.*; //bbb패키지 안에 모든것 import
//import하면 메모리에 다 올라옴
public class Main {
public static void main(String[] args) {
//주의::: src안에 이름이 같은 class만들 수 있음
//=> 이름이 같으면 folder로 구분해준다
//자바에서 하위 폴더 만들기 : 패키지
//자바에서 소스파일들이 구분되어 있는 곳
//기본적인 class 를 설계하고 객체를 생성하여 사용하는 모습
Test t = new Test();
t.a = 10; //멤버변수 사용
t.show(); //맴버함수 사용
//같은 이름의 class를 사용하게 되는 문제가 발생할 수도 있음
//이떄 사용하는 것이 package라는 개념임 => 소문자로만 씀
//물리적인 퐁더구분을 통해 같은 이름이 class를 구별
//사용자정의 class로 Student 객체를 생성해보기
//즉, 학생의 정보[이름, 나이 주소]를 가진 클래스
aaa.Student std = new aaa.Student();
std.name="sam";
//std.age=20; //오류 : 같은 패키지 안에 있지 않아서 접근제한자 오류
//또 다른 학생에 대한 정보가 필요할 수 있음
//[이름, 국어성적, 영어성적]데이터를 가진 Student클래스
bbb.Student std2 = new bbb.Student();
std2.name="robin";
std2.eng = 80;
std2.kor = 76;
//bbb패키지의 Student클래스 객체가 또 필요하다면?
bbb.Student std3 = new bbb.Student();
bbb.Student std4 = new bbb.Student();
// => 패키지명 매번 작성하는 것이 귀찮음
// => 그러서 .java 문서 안에서 bbb. 패키지를 마음대로
// 인식될 수 있도록 미리 클래스를 가져오기 => import
Student std5 = new Student(); //import 후
//2000여개의 Java시스템 API클래스들은 모두 패키지가 있음
Random rnd = new Random();
// 랜덤 클래스 앞에 java.util. 이 패키지 명
Scanner sc = new Scanner(System.in);
//패키지 중 특별한 패키지 하나가 존재함
//Stirng, System 이런 클래스들이 있는 java.lang. 패키지
//원래는 패키지명을 같이 써야하지만
//java.lang은 워낙 기본적인 클래스들만 있어서 자바언어에서 자동 import함
String s = new String();
//Person
aaa.Person ps = new Person();
//가만보니 Java System API 클래스들의 패키지명이 모두
//xxx.xxx 라는 식으로 두 단어 이상으로 구성됨
//패키지명을 가급적 유의미한 단어(마치 카테고리 같은)를 사용하고
//두 단어 이상으로 사용하길 권장함
//보통은 클래스를 만든 회사명의 도메인을 역으로 쓴다
//ex) 지도 클래스 Map 클래스
//이름 만드는 회사 3개..Google, Naver, Kokao
//com.google.Map
//com.naver.Map
//com.kokao.Map
//이떄 패키지명은 반드시 소문자로만 작성할 것을 강제로 권장함
//여러단어를 구분할 때 쓰는 .은 사실 하위폴더임을 의미함
}
}
public class Test {
int a; //멤버변수 : 필드
void show(){ //멤버함수 : 메소드
System.out.println("Test Show");
}
}
캡슐화는 관련이 있는 변수와 함수를 하나의 클래스(class)로 묶는 것
관련있는 객체별로 묶어두면 개발자가 관리하기에 좋다