본문 바로가기
Development (국비 복습 )/자바

[2023-03-21]배열 중복값,

by Puddingforever 2023. 3. 21.

점수 최대값 찾았는데 중복값이 나왔을 때 출력 

String maxNames = ""; 로 최대값이 나온 값을 지정해야한다. 배열의 길이는 변하면 안되서 변수로 넣어둠 

int maxScore = scores[0] ;
String maxNames = "";
for (int i = 0 ; i < scores.length ; i++) {
   maxScore = (maxScore < scores[i]) ? scores[i] : maxScore; 
   if(maxScore==scores[i]) {
        maxNames += stuName[i];
   }
}

멤버 : 자바 클래스에 구현할 수 있는 것 , 필드,메소드,생성자

클래스는 위의 3가지를 코드로 정의해야함 !!! 

 

메인 메소드가 없는 클래스 (참조클래스 : JVM이 실행할 수 없음, 메인메소드로 가져와서 실행해야함) 

 

인스턴스VS 정적멤버

인스턴스  멤버: 클래스 객체가 있어야 사용가능

정적 멤버: 클래스 객체가 없어도 사용 가능 

 

 

 

클래스 객체 만드는 법 

 

먼저 자바스크립트의 객체 만드는 법을 보자 !

var Cat = {
		name : "pudding",
		age : 1 
}

Cat이라는 객체를 생성했으며 , name과 age는 프로퍼티이다. 이 프로퍼티는 자바에서는 필드라고 한다!

 

 

 

인스턴스 객체를 만들어보자.

 
public class Cat {

//클래스 레벨에서 쓰는 변수 , 필드 구현 완료

public String name;
public String kind;
public int age;
public String color;
public String weight;



//생성자 :컴파일된 클래스로 메모리에 객체를 생성할 때, 객체를 어떻게 만들어야 하는지를 구현 !!

public Cat(String name,String kind,int age,String color,String weight) {

this.name = name;
this.kind = kind;
this.age = age;
this.color = color;
this.weight = weight;

}



}

main 메소드가 있는 객체에서 실행시켜준다.  ( 메인메소드가 있는 객체를 실행객체라고 하기도 한다) 

 

public class CatExample {
	public static void main(String[] args) {
		
			Cat myCat = new Cat("나비","코리안 숏헤어",3,"흰색",2);
			Cat yourCat = new Cat("수리","코리안 숏헤어",3,"흰색",2);
			
			System.out.println(myCat.age); // 3
			
	}
}

생성자가 있으니까 값을 집어넣을 수 있는 거임.

만약 default 생성자로 쓴 경우 , 파라메터 값으로 받을 수 없음 

 

class Cat{
    public String name = "pudding";
}
public class MyClass {
 public static void main(String[] args){ 
     Cat myCat = new Cat(); // 생성자를 안만들어서 , 인자값으로 아무것도 넣을 수 없음 
     System.out.println(myCat.name);
    }
}

객체가 생성될 때 , 항상 객체가 어떻게 생성될지 가이드라인을 주는게 생성자이다 ! 

 

 

new 객체 읽는 방법 ! 

Cat myCat = new Cat("나비","코리안 숏헤어",3,"흰색",2);

Cat클라스의 myCat 인스턴스 객체 

 

둘다 객체이지만 , 메모리에서 실행중인 것은 인스턴스라고 한다 !!


Cat의 경우 파라메터값이 있는 생성자를 넣어서 , 이런식으로 객체 생성될 때 틀이 만들어지는데 

CatExample은 생성자를 만들지 않아서 객체의 틀(age, color,kind ,,, 등등)이 따로 없다. 그냥 디폴트 생성자만 있는 것임

 

객체는 자신을 정의한 값들 (필드 : 전역변수)를 가지고 있고 , 기능(메소드)를 수행할 수 있음 

클래스를 객체화 시킨다는 말은 "메모리"에 클래스를 생성

클래스를 인스턴스(메모리에 실행)화 시켰다고 함 ! 


클래스 생성문법

접근제어자 class 클래스이름 { }

 

접근제어자 공부해놓은 글

https://ddddddfsddfdg.tistory.com/142

 

자바 접근제어자 (Access Modifiers)

class Animal{ public void method1(){ } private void method2(){ } } 키워드 public은 다른 클래스에서 쓸 수 있다. 반면에 키워드 private은 다른 클래스에서 쓸 수 없다. 자바에서는 네가지의 접근제어자가 있다. 제

ddddddfsddfdg.tistory.com

 

접근제어자의 기능 : public을 명시(실행 파일에 하나만 있어야함)하거나 , 없는 경우밖에 없다. 

 

 

Dog를 다른 페키지 안에 넣어두었다.

 

이때 Dog 접근제어자를 public으로 넣어도 , import 해주지 않으면 쓰지 못한다.

 

 

public으로 만들어서 다른 패키지에서 쓸 수 있지만 다른 패키지에서 쓰려면 import해줘야한다.

 

 

개발할 때는 대부분 다른 패키지에서 클라스 객체를 사용하기 위해 접근제한자 public을 사용한다. 

 

클라스 접근제한자는 public or default(아무것도 안만들었을 때)  ( private protected는 없음 !!) 

 

필드나 메소드의 접근제한자는 public default(아무것도 안만들었을 때) private protected  

 

이렇게 파란세모가 있는 것은 클래스의 접근제어자가 public이 아니라는 뜻임 default클라스라서 패키지 내부에서만 쓸 수 있음 

 


필드의 특징 

초기값을 설정하지 않아도 기본 초기값이 정해져있다. 

//필드 멤버
	public String manufacturer = null;
	public String model;
	public int cc = 0;
	public String color ;
	public int speed = 0;


사실 이렇게 초기화를 안해도 정수는 0, 실수는 0.0 , boolean 은 false , String 객체는 null로 초기화된다.

그래서 그냥 public String manufacture; 이런식으로 만들어도 된다.

하지만 메소드 내부에 선언되는 로컬변수는 초기화 값이 없기 때문에 무조건 초기값을 설정해준다. 

 

생성자 : 객체를 어떻게 만들어야되는지를 구현

객체가 불러질 때 생성자는 반드시 실행됨 

메소드를 넣어도 되고 , 파라메터 생성자로 필드에 필요한 값을 대입하는 식으로 만들어도 됨

 

 

기본생성자 : 파라메터가 없는 생성자 , 컴파일 시에 자바 컴파일러가 기본생성자를 자동으로 추가함 

클라스 만드는 3가지 멤버 (필드,메소드.생성자) 중에 생성자는 반드시 필요함 ! 

public Car(){
}

생성자를 여러개 만들어서 오버로딩 할 수 있음 

 

조건 !

 

생성자도 오버로딩 할 수 있음 .

대신 매개변수 갯수가 달라야함
만약 갯수가 동일해도 순서에 따른 타입이 달라야함 

 

 

 

이런식으로 갯수도 같고 타입이 같으면 오버로딩을 못함 .. 생성자를 만들때 갯수가 같다면 반드시 타입을 다르게 해야함 

 

생성자를 생성할 때 , 안에다가 조건을 걸 수도 있다.

public Car(String manufacturer,String model,int cc,String color,int speed) {
		this.manufacturer = manufacturer;
		this.model = model;
		if(cc < 1000 ) {
			this.cc = 1000;
		}else {
			this.cc = cc;
		}
		this.color = color;
		this.speed = speed;
	}

추가적으로 알아야할 것 ! 

매개변수가 있는 생성자를 선언한 경우 , 컴파일 시에 생성되는 자바 바이트코드(.class 파일)은 기본 생성자를 선언하지 않음 

 

 

댓글