객체지향프로그래밍(OOP)

소정·2023년 1월 25일
0

Java

목록 보기
8/23

객체지향프로그래밍(OOP)

object oriented progaming
특정한 기능을 가진 녀석을 만들어서 그 기능을 사용하는 것

객체란

고유의 기능과 값을 가진 녀석(변수 + 함수)

Class

어떤 객체의 종류, 객체를 만드는 틀

클래스 선언 방법

class 클래스명 {
필드;
메서드();
}

사용자 정의 class

나만의 객체를 만들어서 사용

1. class 만드는 4가지 방법


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를 사용하게 되는 문제가 발생할 수도 있음 이때 사용하는 것이 package라는 개념
  • 패키지명은 반드시 소문자로만 작성할 것을 권장함

=> 패키지를 나누면 같은 이름의 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)로 묶는 것
관련있는 객체별로 묶어두면 개발자가 관리하기에 좋다

profile
보조기억장치

0개의 댓글