프로그래밍/java

JAVA 프로그래밍 47일차 (25/1/16)

wkun 2025. 1. 16. 17:54

contents

 

자바개념정리

 

chapter06

클래스

코드읽는법

 

 

-------------------------------------------------------

 

 

자바개념정리

 

chapter06

 

클래스

참조변수 데이터가 저장되어 있는 주소

연산자 new에 의해서 인스턴스(객체)가 메모리(Ram)의 빈 공간에
생성되고 난 다음 대입 연산자(=)에 의해서 인스턴스가 저장된 메모리의
주소 값이 참조변수에 저장됨
cf) 변수: 데이터를 저장하는 상자
보라색: int float boolean char
call by value(변수)
call by reference(객체) - > 참조변수
검은색: String 참조변수(주소) => 직접적인 비교연산자를 쓰면 안됨(a==b)
참조변수로 인스턴스에 접근하는 방법?
변수에 접근: 참조변수.변수명
메서드를 실행: 참조변수.메서드명();
. : ~안에  
인스턴스 구조는 같되 데이터는 다를 수 있음    
객체 생성? new    
객체의 변수 or 함수불러오는 법?
.    
인스턴스 타입 객체생성 new
참조변수.변수 => 그외 필요할 때마다 생성
구분해서 만드는 이유? => 리소스 관리하기위해  
클래스 타입 미리
클래스이름.변수 => 필수적 공통 요소
   
인스턴스 변수
클래스의 자식
객체마다 가지는 고유한 변수(전역변수)
인스턴스를 생성할 때 만들어지며 인스턴스마다 고유의 저장 공간을 가지므로 각각 다른 값을 가질 수 있음
   
클래스 변수 클래스가 처음 메모리에 로딩될 때 생성(미리 생성되어 있음)
static 키워드 사용
공통된 값을 공유
   
static과 instance 접근방법?
static: 클래스명.변수 or 함수();
instance: Cars x = new Cars();
x.변수명;
   
차이점? 인스턴스: 각각의 값을 가짐 ex)복제
static: 1개만 존재 ex) 분신(실체 하나)
   
객체생성의 단위?
클래스    
메서드 함수(코드의 묶음) -> 한 번 정해 놓으면 언제든 호출하면 됨 => 재사용
특정한 작업(실행)이나 논리(연산)을 구성하는 코드를 묶어 놓은 것
역할: 1.코드 실행 2.결과반환
   
함수를 만드는 방법
반환타입 메서드명(타입변수명(매개변수, 지역변수),....){
내용
return 값; => 필수
}
순서
1.함수생성 => 이름( ){ }
2.반환타입 적기 => int 이름 ( ) { }
3.매개변수와 return값 넣기 = >매개변수 정수 2개
이름(9, 4);
4.인스턴스 또는 static 여부 확인 => instance 객체생성()
 
반환타입 종류
(Data type)
1.정수(int) 실수(float) 논리(boolean) 문자(char) 참조(해당이름)
2.void => 반환 값이 x return(x)
   
매개변수 호출될 때 전달값을 받음    
지역변수 함수 안에 존재하는 변수    
파라미터 = 전달값 ex) a(int a) { } <- a(9);
매개변수, 지역변수 파라미터(전달값)
 
클래스 멤버와 인스턴스 멤버간의 참조 및 호출
static -> instance를 호출x
만들 당시에 있나 없나의 여부에 따라서
  객체생성방식: 
static
instance
오버로딩 함수, 겹쳐서 생성
이름이 같은 메서드의 매개변수의 개수와 타입이 다름
  *this. : 현재클래스의 전역변수

. : 클래스 구분
생성자 함수
객체 생성시 전역변수의 값을 변경 가능
모든 클래스에는 하나 이상의 생성자가 있어야 함(자동으로 생성자추가)
기본생성자:
클래스 이름( ) { }
매개변수를 갖고 있는 생성자:
클래스 이름(String color, int num) {
}
구별: 
리턴 타입 없음(반환데이터타입없음)
클래스와 이름 같음

 

<메서드>

1)

package ch06;


public class method {
static void printer() {
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
System.out.println("안녕");
}

public static void main(String[] args) {
printer();
printer();



}


}

 

실행 결과

안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕

 

2)

package ch06;


public class method2 {


public static void main(String[] args) {
// System.out.println(test());
//참조변수
method2 t = new method2();

int result = t.test();
System.out.println(result);


}
// test(){} 함수생성
int test() {
return 9; //반환값 필수
}
// test(); 함수호출

}

 

실행 결과

9

 

<클래스 생성과 호출>

1)

package ch06;


public class 나 {
int money = 10000;


public static void main(String[] args) {
//step 1 : 주소를 담을 변수생성
다은.money2; //클래스이름.변수

다은 friend1 = new 친구(); // 참조변수.변수
System.out.println(friend1.money);

// String a = "안녕"; //검은색 참조변수: 주소
// String b = "안녕";
//
// a == b // 직접적인 비교연산자를 쓰면 안됨



}


}

 

package ch06;


public class 친구 {
int money = 2000;
static int money2 = 10; //클래스타입의 변수 미리 만들어둠
}

 

2)

package ch06;


public class start {


public static void main(String[] args) {
//변수 생성
cal test;
test = new cal();

int v = test.plus(1, 2);
System.out.println(v);

cal test2;
test2 = new cal();

int value = test2.minus(7, 4);
System.out.println(value);

cal test3 = new cal();

boolean value2 = test3.mul(true, false);
System.out.println(value2);

cal test4 = new cal();

char value3 = test4.div('a', 'b');
System.out.println(value3);

cal test5 = new cal();

double value4 = test5.db(2.3, 1.2);
System.out.println(value4);

cal test6 = new cal();

String value5 = test6.str("A", "B");
System.out.println(value5);

cal test7 = new cal();

float value6 = test7.fl(1.5f, 2.2f);
System.out.println(value6);


}


}
package ch06;


public class cal {
//데이터 타입의 종류: int, float, boolean, char, String(참조)
int plus(int a, int b){ //3.매개변수 생성
int result = a + b;
return result; //2.반환타입 이름(){return 값;}
}//1.함수생성 이름(){}

//4.인스턴스 스태틱 결정

int minus(int c, int d){
int result2 = c - d;
return result2;
}
boolean mul(boolean e, boolean f){
boolean result3 = e&&f;
return result3;
}
char div(char g, char h){
char result4 = (char)(g + h);
return result4;
}

double db(double d, double e) {
double result5 = d + e;
return result5;
}
String str(String i, String j){
String result6 = i + j;
return result6;
}
float fl(float k, float l) {
float result7 = k + l;
return result7;
}
}

 

실행결과

3
3
false
à (유효한 범위 값 아님)
3.5
AB
3.7

 

3)

package ch06;


public class refer {


public static void main(String[] args) {
// 재료 수집 : 변수
//변수생성 : 데이터타입(클래스명) 변수명
cal ttt;
//재료 가공 객체생성 호출
//ttt변수는 참조변수 new 주소
ttt = new cal();
ttt.plus(0, 0);
//제어문

//결과


}


}

 

<생성자>

package ch06;


class Car {
String color;
String model;


// 생성자
Car(String color, String model) {
this.color = color;
this.model = model;
}


void displayInfo() {
System.out.println("Car model: " + model + ", Color: " + color);
}
}


public class test {
public static void main(String[] args) {
Car myCar = new Car("Red", "Toyota");
myCar.displayInfo(); // 출력: Car model: Toyota, Color: Red
}
}

 

<생성자>

package ch06;


class Car {
String color;
String model;


// 기본 생성자
// Car() {
// this.color = "Unknown";
// this.model = "Unknown";
// }


// 매개변수 생성자
Car(String color, String model) {
this.color = color;
this.model = model;
}


void displayInfo() {
System.out.println("Car model: " + model + ", Color: " + color);
}
}


public class test {
public static void main(String[] args) {
// Car myCar = new Car();
Car myCar = new Car("Red", "Toyota"); // 매개변수 생성자 호출
myCar.displayInfo(); // 출력: Car model: Toyota, Color: Red
}
}

 

코드 읽는법

*코드읽는법
변수: 파란색(클래스 전역)/ 갈색(함수 지역)
명령어: 보라색
데이터: ' ', " " 글자데이터, 숫자 그냥 적음 =>나머지 검은색
함수: ( )
클래스명
.
연산자 ex) student.length;
(부모)참조변수 (자식)파란색 new객체->상속


cf)
(int)
(데이터타입): 수동형변환