본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-02-18 자바공부 ( ArrayList ,싱글톤)

반응형

리스트

 

어제 ,엊그제 배운 배열은 데이터의 크기가 커지거나 배열 중간에 데이터를 넣어야 할때는 수동으로 작업을 해줘야 하는 불편함이 있는데 , 즉 데이터의 성격이 유동적일땐 사용하기 좋지 않다 

그래서 그 불편함을 줄이기 위하여 리스트를 사용한다 

 

 

리스트 사용방법  

* 리스트도 클래스 이다

* 리스트는 배열과 다르게 자동적으로 늘어난다 

* <> 꺽세 안쪽엔 내가 사용할 데이터형을 넣어준다 (클래스형을 준다 : int : Integer 등등)

 

어레이리스트도 new 해서 인스턴스 해주기 때문에 안쪽에 사용할 수있는 메소드가 있다 

 

add()    :   값을 추가합니다.

get()     :   값을 가져옵니다.

size()    :    크기 값을 알 수 있습니다.


&안드로이드 실습&  이름과 나이를 입력 받아 어레이 리스트로 저장출력 하는 프로그램을 만들것이다 . 

 

일단 메인 엑티비티 클래스 한개 , 학교클래스 한개 , 학생 클래스 한개 씩 해서 총 3개의 클래스를 만들어 줬다.

<xml 은 생략 하고 코드 작성만> 

 

Student 클래스

package com.example.selfcheck;

public class Student {
    // 나이와 이름을 받을 변수 
    int age;
    String name;
    // 생성자 나이와 이름을 매개변수로 받아서 초기화시킴 
    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
    //나이와 이름 getter 와 setter
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

*작성의 팁 : 오른쪽 마우스 클릭후 Generate 클릭후 Constconstructor(생성자) 생성 가능 , getter and setter 도 가능 

 

Scool 클래스

실제로 동작하는 것들을 스쿨 클래스에 담아서 사용 하였다 

package com.example.selfcheck;

import java.util.ArrayList;

public class School {
    // 학교 이름을 받을 변수
    String name ;
    //스튜던트를 담을수 있는 어레이 리스트 만듬
    ArrayList<Student> students= new ArrayList<Student>();
    //생성자 학교이름을 매게변수로 받아서 클래스내부에 설정
    public School(String name) {
        this.name = name;
    }
    //name getter
    public String getName()
    {
        return name;
    }
    //name setter
    public void setName(String name) {
        this.name = name;
    }
    // student를 어레이 리스트(students)에 추가하는 메소드
    public void addItem(Student student) {
        students.add(student);
    }
    //어레이 리스트의 크기값을 확인 하는 메소드 *return 값이 있어서 int 로 설정
    public int size(){
        return students.size();

    }
    //실제 생성된것들을 출력해주는 String 메소드
    public String toSting(){
        String output = ""; // 쓰레기 값 들어 가는거 방지
        // output변수에 학교 이름을 출력하는 것 \n 으로 띄워줌
        output = "학교이름 : " + name +"\n";
        for(int i = 0 ; i<students.size(); i++){ //리스트의 크기만큼 포문으로 돌림
            // output에 출력할 메시지를 저장후 리턴 해준다
            output += "학생#"+i+ ": " + students.get(i).getName()+ "," + students.get(i).getAge() +"\n";
        }
        return output;
    }

}

Main클래스  

package com.example.selfcheck;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    EditText editText1 , editText2 ;
    TextView textView2, textView1;
    School school ; // 스쿨 클래스 만들어 줌 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1 = findViewById(R.id.editText);
        editText2 = findViewById(R.id.editText2);
        textView1 = findViewById(R.id.textView);
        textView2 = findViewById(R.id.textView2);
        //스쿨 클래스 인스턴스화 함
        school = new School("마법학교");

    }

    public void onAdd(View view) {
        //이름과 나이 받아서 변수에 넣어준다
        String name = editText1.getText().toString();
        int age = Integer.parseInt(editText2.getText().toString());
        //위 에디트 텍스트에 받은 값들을 스튜던트 클래스인스턴스화 하면서 같이 넘겨 주었다 
        Student student  = new Student(age , name);
        // school.addItem메소드에 위에 인스턴스한 student를 참조시켜준다    
        school.addItem(student);
        //토스트 메시지 
        Toast.makeText(getApplicationContext(), "학생객체가 리스트에 추가됨" +name +"학생의 나이" + age  ,Toast.LENGTH_LONG).show();
        //텍스트뷰에 school.size메소드를 입력해준다 
        textView1.setText("추가된 학생 "+school.size());

    }

    public void onList(View view) {
        //텍스트뷰에 school.toString 메소드를 입력해준다 
        textView2.setText(school.toSting());


    }
}

스쿨, 스튜던트 클래스를 만들어주고 어레이리스트를 이용해 학생객체를 만들어 입출력 해주었다 

주석을 잘 보면 이해가 쉽다  

 


싱글톤 

한번에 하나의 객체만 가질수 있는 클래스 이다 

 

싱글톤 사용방법  

* 생성자를 private 로 만들어준다  

* 외부에서 호출할 수 있는 getInstance()선언 꼭 이렇게 선언해야한다 

*정적 필드에서 참조하는 자신의 객체 리턴 

package SingleTon;



public class Master {
	//유일하게 생성한 인스턴스 ! 
	private static Master master = new Master();
	
	private String name = "관리자";
	//생성자를 private 으로 만들어줌 
	private Master() {}
	
	//외부에서 참조할 수 있는 public 메서드
	public static Master getInstance() {
		return master;
	}
	//이름
	public String getName() {
		return name;
	}
	
	
	
}

 

 

 

예를 들면 어떤 회사의 직원을 객체지향으로 구현 한다생각하면  직원은 여러개 생성해야 하지만 회사는 하나만 생성해야한다  이럴때 사용하는것이 싱글톤 패턴이다 

 

이제 회사원 객체를 만들어 보자 

package SingleTon;

public class Worker_2 {
	
	private String name = "작업자2";
	
	public void display() {
		System.out.println(Master.getInstance().getName()+"이(가) " +name +"에게 일시킨다");
	}
}

회사원 객채를 만들었다 

그리고 실행 해보자! 

 

package SingleTon;

public class SingleTon_Ex {

	public static void main(String[] args) {
		
		Worker_1 worker1 = new Worker_1();
		Worker_2 worker2 = new Worker_2();
		
		worker1.display();
		worker2.display();
		
		
	}

}

 

 

이런식으로 단 하나의 인스턴스를 가져야할때 사용하는 것이 싱글톤 패턴이다! 

 

 

공부하는 중간에 시작해서 초반내용은 없지만 시간나면 올리도록하자옳옳옳

 

(21-03-10 복습 1회)

반응형