organize/자바

자바 처음부터 다시 시작하기 7

001cloudid 2024. 4. 18. 22:28
728x90

객체 지향 언어 OOP

		//객체지향 언어
		//코드의 재사용성을 높이고, 유지보수가 쉽게하며, 코드의 중복 제거
		//객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
		
		//객체지향개념의 규칙을 외우기
		
		//핵심개념 : 캡슐화, 상속, 추상화, 다형성

 

클래스와 객체

		//클래스와 객체
		//클래스는 객체를 정의해놓은 것이며, 용도는 객체를 생성하는 데 사용
		//객체는 실제로 존재하는 것이며, 용도는 객체가 가지고 있는 기능과 속성에 따라 다름
		//즉, 클래스는 설계도, 객체는 제품이라고 생각하면 편함 
		//제품 설계도(클래스) - 제품(객체), TV 설계도(클래스) - TV(제품)

		//객체의 구성요소 - 속성과 기능
		//객체 = 속성(변수) + 기능(메서드)
		
		//객체와 인스턴스
		//객체 : 모든 인스턴스를 대표하는 일반적인 용어
		// == 인스턴스 : 특정 클래스로부터 생성된 객체(ex, tv인스턴스)
		// 클래스(설계도) --인스턴스화--> 인스턴스(객체)(제품)
		
		//클래스(설계도)가 필요한 이유? 객체(제품)를 생성하기 위해
		//객체(제품)가 왜 필요한 이유? 객체를(제품을) 사용하기 위해
		//객체를 사용한다는 것은? 객체가 가진 속성(변수)과 기능(메서드)을 사용하기 위해

 

		//TV라는 객체로 생각해봤을 때
		//TV 속성은 크기, 길이, 높이, 색상, 볼륨, 채널 등으로 둘 수 있고,
		//TV 기능은 켜기/끄기, 볼륨 변경, 채널 변경 등으로 둘 수 있음
		
		//속성 -> 변수, 기능 -> 메서드
		
		class TV{
			int size; //크기
			int length; //길이
			int height; //높이
			String color; //색상
			int volumn; //볼륨
			int channel; //채널
		}
		
//		void power() {
//			power = !power;
//		}
//		void volumnUp() {
//			volumn++;
//		};
//		void volumnDown() {
//			volumn--;
//		}

 

클래스 작성

		//클래스 작성
		//하나의 소스파일에는 하나의 클래스가 작성하는 것이 바람직
		//public class가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야함
		//public class에는 단 한 개의 클래스만 있어야함
		//public class가 하나도 없는 경우, 소스파일의 이름은 아무렇게나 가능함

 

객체의 생성과 사용

		//객체의 생성과 사용
		//클래스 작성(설계도) -> 객체 생성(제품 생성) -> 객체의 사용(제품 사용) 순서 
		
		//객체의 생성
		//클래스명 변수명; 클래스의 객체를 참조하기 위한 참조변수를 선언
		//변수명 = new 클래스명(); 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장
		//==> 클래스명 변수명 = new 클래스명();
		// Tv t; Tv클래스 타입의 참조변수 t를 선언
		// t = new Tv(); Tv인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장
		
		//객체의 사용
		//객체의 변수, 메서드를 사용
		
		//t.channel = 10; Tv인스턴스의 멤버변수 channel의 값을 10로 함. (변수 사용)
		//t.channelDown(); Tv인스턴스의 메서드 channelDown()을 호출. (메서드 사용(호출))
		
		//하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우 -> 가능
		//여러 인스턴스ㅇ를 하나의 참조변수가 가리키는 경우는 -> 불가능
		//변수 하나의 값만 저장 가능

 

package chapter06;

class Tv{
	//Tv 속성(멤버변수)
	String color; //색상
	boolean power; //전원상태
	int channel; //채널
	
	//Tv 기능(메서드)
	void power() {
		power = !power;
	} //TV를 켜거나 끄는 기능을 하는 메서드
	
	void channelUp() {
		++channel;
	} //TV 채널을 높이는 기능을 하는 메서드
	
	void channelDown() {
		--channel;
	} //TV 채널을 낮추는 기능을 하는 메서드
	
}

public class Study04Ex1 {

	public static void main(String[] args) {
		Tv tv = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
		tv.channel = 7;
		tv.channelUp();
		System.out.println("현재 TV 채널은 " + tv.channel + "입니다");
	}

}

 

package chapter06;

public class Study04Ex2 {

	public static void main(String[] args) {
		Tv tv1 = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
		Tv tv2 = new Tv();
		System.out.println("tv1의 channel 값은 " + tv1.channel); //0
		System.out.println("tv2의 channel 값은 " + tv2.channel); //0
		
		tv1.channel = 7; //tv1의 channel 값을 7로 변경
		
		System.out.println("tv1의 channel 값은 " + tv1.channel); //7
		System.out.println("tv2의 channel 값은 " + tv2.channel); //0
	}

}

 

package chapter06;

public class Study04Ex2 {

	public static void main(String[] args) {
		Tv tv1 = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
		Tv tv2 = new Tv();
		System.out.println("tv1의 channel 값은 " + tv1.channel); //0
		System.out.println("tv2의 channel 값은 " + tv2.channel); //0
		
		tv1.channel = 7; //tv1의 channel 값을 7로 변경
		
		System.out.println("tv1의 channel 값은 " + tv1.channel); //7
		System.out.println("tv2의 channel 값은 " + tv2.channel); //0

		tv2 = tv1;
		System.out.println("tv1의 channel 값은 " + tv1.channel); //7
		System.out.println("tv2의 channel 값은 " + tv2.channel); //0
	}

}

 

객체 배열

		//객체 배열
		//객체 배열 == 참조변수 배열
		//Tv tv1, tv2, tv3;
		//Tv[] tvArr = new Tv[3]; == Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
		// tvArr[0] = new Tv();
		// tvArr[1] = new Tv();
		// tvArr[2] = new Tv();

 

클래스의 정의

		//클래스의 정의
		//설계도, 데이터 + 함수, 사용자정의 타입

		//클래스 == 데이터 + 함수
		//변수 : 하나의 데이터를 저장할 수 있는 공간
		//배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간(같은 타입만)
		//구조체 : 서로 관련된 여러 데이터를 하나로 저장할 수 있는 공간(다른 타입도 OK)
		//클래스 : 데이터와 함수의 결합(구조체 + 함수(명령문 묶음))
		
		//사용자 정의 타입 원하는 타입(클래스)을 직접 만들 수 있음
		class Time{
			int hour;
			int minute;
			int second;
		}
		Time time = new Time();

 

위치에 따른 변수

		//선언위치에 따른 변수의 종류
		//종류 : iv(instance variable, 인스턴스 변수), cv(class variable, 클래스변수, static변수, 공유 변수), lv(local variable, 지역변수)
		//영역 클래스영역 - iv, cv(static + iv) 메서드 영역 - lv
		//클래스 영역 : 선언문(변수, 메서드)만 가능, 순서는 상관없음
		// 변수의 종류 	선언 위치 			생성시기
		// 클래스 변수		클래스 영역 			클래스가 메모리에 올라갈때(설계도가 필요할 때). 객체 생성 X -> 아무대나 사용가능
		// 인스턴스 변수	클래스 영역			인스턴스가 생성되었을 때. 객체 생성 O
		// 지역 변수 		클래스 영역 이외의 영역	변수 선언문이 수행되었을 때
		
		//객체는 iv변수 묶음

 

클래스변수, 인스턴스 변수

		//클래스 변수(cv)와 인스턴스 변수(iv)
		//객체마다 다르게 유지되어야 하는 값(개별 속성) => 인스턴스 변수
		//모든 객체가 공통적으로 같아야하는 값(공통 속성) => 클래스 변수

 

package chapter06;

class Card{
	//개별 => iv
	String kind; //무늬
	int number; //숫자
	
	//공통 => cv
	static int width = 100; //폭
	static int height = 250; //높이
}

public class Study08Ex1 {

	public static void main(String[] args) {
		
		Card card = new Card();
		//iv
		card.kind = "Clover"; 
		card.number = 7;
		//cv => 통상적으로 cv는 Class.cv로 써야함. 참조변수를 사용하는 것도 가능은 하지만 권장하지 않음
//		card.width = 200;
//		card.height = 300;
		Card.height = 200;
		Card.width = 300;
		
	}

}

 

 

 

 

728x90

'organize > 자바' 카테고리의 다른 글

Java 9  (0) 2024.04.21
자바 처음부터 다시 시작하기 8  (1) 2024.04.20
자바 처음부터 다시 시작하기 6  (0) 2024.04.17
자바 처음부터 다시 시작하기 5  (0) 2024.04.15
자바 처음부터 다시 시작하기 4  (0) 2024.04.14