빌더 패턴빌더 패턴(Builder Pattern)

 

빌더 패턴이란 동일한 생성 절차에서 생성 과정과 표현 방법을 분리하여 서로 다른 결과를 만들게 하는 패턴이다.

 

 

빌더 패턴이 중요한 이유:
번거로운 생성자 정의(생성 인자가 많을 때 )

 

 

 

생성자가 많을 때 아래 코드처럼 사용할 생성자를 전부 다 만들어야 한다. 또한 인자 순서(?)도 신경써서 작성해야 한다. 

public class Computer{
	private String user;
	private String cpu;
	private String ram;
	
	public Computer(String user){
	this.user =user;
}
	public Computer(String user,String cpu){
	this.user = user;
	this.cpu = cpu;
}

	public Computer(String user,String cpu,String ram){
	this.user =user;
	this.cpu = cpu;
	this.ram = ram;
}
}

 

 

빌더 패턴 : builder.set()으로 원하는 인자나 순서 상관없이 입력가능하다.

 

(순서 : user - ram -cpu 로 반드시 선언할 필요가 없다)

(인자 : user값을 안 넣어도 되고 ram,cpu만 넣어도 된다)

>>생성자로 하게되면 해당 생성 인자에 default값을 넣거나 따로 생성자를 만들어야 함!

 

 

 

생성자를  만드는 것이 아니라 빌더로 따로 정의해서 가독성이 좋아진다.

public static class Builder {
	private String user;
	private String cpu;
	private String ram;

public Builder setUser(String user){
	this.user = user;
	return this;
}
public Builder setCpu(String cpu{
	this.cpu = cpu;
	return this;
}
public Builder setRam(String ram{
	this.ram= ram;
	return this;
}
public Builder build(){
	return new Builder(user,cpu,ram);
}
}

 

public class BuilderPattern{
public static void main(String []args){ 	
Builder builder = new Builder();

Computer computer= builder
.setUser("senungwon")
.setRam("8g")
.setCpu("256g ssd")
.build();
	}
}

접근 제어자(access modifier)

 

 

외부에 대한 접근을 제어하는 문법을 접근 제어자(access modifier)라고 한다.
보통 변수나 함수, 클래스앞에 접근 제어자를 붙이고 접근 허용 범위를 관리한다.

 

 

 

 

접근 제어자는 크게 4가지로 분류된다.
private,default,protected,public

 


private

private을 사용할 경우, 그에 해당하는 함수나 변수, 클래스는 해당 클래스에서만
접근할 수 있다. 즉 클래스 외부에서 사용할 수 없고 해당 클래스내에서만 사용할 수 있다.

 

 

  • 같은 패키지, 같은 클래스
public class PrivateClass{
	private int private_num = 10; 	//PrivateClass 내에서만 접근 가능
	private String private_str = "private"; 	//PrivateClass 내에서만 접근 가능  
    
    private String getPirvate(){
    return this.private_str; 	//같은 클래스 내에 있는 변수를 함수로 접근 가능
    }
    
}

 

 

default

이는 같은 패키지 내에서만 접근이 가능하다. default는 따로 
접근 제어자를 입력할 필요가 없다.

 

 

  • 같은 패키지, 다른 클래스
package seungWon.defaultone;

class DefaultClass{
	int year = 2019;
}


public class DefaultTwoClass{
	int month = 9;
    int day = 14;
    public static void main(String []args){
  	System.out.println(year+"."+month+"."+day);
    //같은 패키지,다른 클래스에 있는 변수 호출가능
   }
}

 

 

 

 

protected

default와 같이 같은 패키지에서 접근이 가능하다. 하지만 다른 패키지에서 사용할 수 있는 경우가 있다.
다른 패키지에 상속받는 부모 클래스가 있을 때 접근이 가능하다.

 

 

  • 다른 패키지, 상속받은 클래스
package seungWon.protectedone;

public class ProtectedClass{
	int year = 2019;
}

package seungWon.protectedtwo;
import protectedone.ProtectedClass;

public class MainClass extends ProtectedClass{
	int month = 9;
    int day = 14;
    
    public static void main(String []args){
  	System.out.println(year+"."+month+"."+day);
    //다른 패키지,상속한 클래스에 있는 변수 호출가능
   }
}

 

 

 

 

public

public은 어디에서나 접근이 가능하다.따라서 사용하기 편할 수 있지만
정보가 노출되어 있다는 단점이 있다.

 

 

  • 다른 패키지,다른 클래스
package seungWon.publicone;

public class PublicClass{
	int year = 2019;
}
package seungWon.publictwo;

public class MainClass{
	int month = 9;
    int day = 14;
    
    public static void main(String []args){
  	System.out.println(year+"."+month+"."+day);
    //다른 패키지,다른 클래스에 있는 변수 호출가능
   }
}

 

이처럼 접근 제어자는 각자 장단점이 있고 이를 잘 활용하여 코드를 짜야 한다.

 

 

 

 


public - 모두 다 
protected - 동일 패키지, 상속
default - 동일 패키지
private - 동일 클래스

안드로이드 기초

 

안드로이드에서 자주 사용하는 intent에 대해 알아보자!

 

 

안드로이드의 기초 지식이 궁금하다면

 

2020/09/07 - [대외 활동/CADI(개발A 보충스터디)] - Android 시작 및 기초 다지기!(Button,Toast,ImageView)

 

Android 시작 및 기초 다지기!(Button,Toast,ImageView)

Android 시작 및 기초 다지기 안드로이드 앱 개발을 하고 싶다면 Android Studio부터 설치 해야 한다. 2020/08/25 - [대외 활동/CADI(개발A 보충스터디)] - 안드로이드 스튜디오 설치 안드로이드 스튜디오 설�

dev-seungwon.tistory.com

 

 


인텐트(intent)

 

 

 

인텐트(intent)란 메시징 객체이며 다른 앱으로 부터 작업을 요청할 때 자주 사용된다. 대표적으로 액티비티 간 화면 전환이나 특정 사이트로 링크를 줄 떄 혹은 key값을 받아 그 값을 주고 받을 때 주로 사용한다.

 

 

Intent intent = new Intent();

-괄호 안에 출발지와 도착지를 기술한다

-각각 클래스 명을 기술하면 된다.

 

startActivity()

- 괄호 안에 자신이 선언한 인텐트 객체를 넣는다.

 

finish()

-해당 인텐트가 전달되거나 요청이 이루어진 이후 종료한다.(데이터 낭비 방지 혹은 화면 종료도 가능)

 

 

 btn_intent라는 버튼을 눌렀을 때 intent를 통해 SecondActivity로 화면 전환을 하는 코드다. 

이러한 형태로 Activity간 화면 전환이 이루어진다.

 

 

 

인텐트 활용!

 

인텐트를 활용하기 위해 MainActivity에서 총 3가지의 버튼을 만든다.

 

 

 

1.LayoutActivity로 전환하는 버튼

2.계산(add)하는 화면으로 전환하는 버튼

3. 링크를 통해 특정 사이트로 접속하는 버튼

MainActivity

 

 

 

 

 

LayoutActivity에서는 총 4개의 텍스트 뷰로 나에 대한 간단한 설명이 나오는 화면이다.

 

LayoutActivity

 

 

다시 MainActivity로 가서 링크를 누르게 되면 이렇게 사이트 접속이 가능하다.

 

http://www.naver.com으로 접속

 

 

 

 

MainActivity의 link버튼에 관련 코드

 

 

 

 

 

 

 

 

 

계산기를 누르게 되면 값을 더하는 View들이 있고 GOTO를 누르게 되면 다시 LayoutActivity으로 가게 된다.

이는 MainAcitvity에서만 intent로 화면전환을 하는 것이 아니라 다른 액티비티에서도 가능하다는 점을 보여준다.

그렇기 때문에 GOTO버튼을 누르면 Toast메세지가 나오게 하였다.

 

SecondActivity

 

 

LayoutActivity에 Toast메세지 출력

 

 

ADD버튼을 눌렀을때 계산기 동작

 

 

 


 

 

java코드

 

 

 

MainActivity

public class MainActivity extends AppCompatActivity {

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

        Button btn_layout =(Button)findViewById(R.id.btn_layout);
        Button btn_intent = (Button)findViewById(R.id.btn_intent);
        Button btn_link = (Button)findViewById(R.id.btn_link);
        
        btn_link.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com")));
            }
        });

        btn_intent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
                finish();
            }
        });

        btn_layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,LayoutActivity.class));
            }
        });
     }
}

 

계산기 관련 코드(SecondActivity)

public class SecondActivity extends AppCompatActivity {

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

        final EditText et_num1 = (EditText)findViewById(R.id.et_num1);
        final EditText et_num2 = (EditText)findViewById(R.id.et_num2);
        Button add = (Button) findViewById(R.id.btn_add);
        final TextView tv = (TextView) findViewById(R.id.tv_result);


        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String num1= et_num1.getText().toString();
                String num2= et_num2.getText().toString();

                int num_1 =Integer.parseInt(num1);
                int num_2 =Integer.parseInt(num2);

                tv.setText(num_1+num_2+""); //setText는 string Type
            }
        });


        Button btn_goto =(Button)findViewById(R.id.btn_goto);
        btn_goto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(SecondActivity.this,LayoutActivity.class);
                i.putExtra("key","hi");
                startActivity(i);
                finish();
            }
        });
    }
}

 

LayoutActivity

public class LayoutActivity extends AppCompatActivity {

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

        Intent j = getIntent();
        String test = j.getStringExtra("key");
        if(test != null)
        Toast.makeText(getApplicationContext(),test,Toast.LENGTH_LONG).show();

    }
}

 

 

 

 


 

 

의문점

코드를 짜면서 SecondActivity의 GOTO버튼을 누를경우에만 Toast메세지를 띄우게 설정해놨는데 처음 MainActivity에서

Layout을 누르면 Toast 메세지가 버그가 걸린 것처럼 메세지 없이 뜬다.

 

해결

 LayoutActivity에서 if(test != null) 을 넣어서 만약 SecondActivity에서 해당 인텐트를 받지 않는다면 Toast메세지가 뜨지않게 설정해 두었다. 그렇게 한다면 메인 엑티비티에서 바로 Layout버튼을 눌러도 토스트 메세지 버그 현상이 이러나지 않는다!!

 

 

 

 

 

참조

developer.android.com/guide/components/intents-filters?hl=ko

 

인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use cases: An Activity represents a single screen in…

developer.android.com

 

+ Recent posts