'전체 글'에 해당되는 글 66건

  1. 2015.10.16 canvas (원)
  2. 2015.10.13 리소스에 대해서 - Color
  3. 2015.10.13 리소스에 대해서 - Value
  4. 2015.10.11 git 란
  5. 2015.10.11 centOs7 nginx 설치하기
  6. 2015.09.29 [안드로이드] 룰렛 2
  7. 2015.09.03 Decorator Pattern (데코레이터 패턴)
  8. 2015.08.28 다형성

canvas (원)

android 2015. 10. 16. 15:37 |

public class ShapeActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
//setContentView(R.layout.activity_shape);

/* //리소스test
//Textview에서 리소스 가져온다
TextView textView =(TextView)findViewById(R.id.text_view);
//Textview의 문자열을 해달 리소스ID의 문자열로 변경한다
textView.setText(R.string.sample_string);
//TextView의 배경색을 해당 Color리소스로 적용한다.
textView.setBackground(R.color.RED);*/
}

private class MyView extends View{

public MyView(Context context){
super(context);
}
@Override
protected void onDraw(Canvas canvas){
canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
RectF rect = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());

//Example values
int mRadius = 300;
rect.set(getWidth() / 2 - mRadius, getHeight() / 2 - mRadius, getWidth() / 2 + mRadius, getHeight() / 2 + mRadius);

Paint p1 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint p2 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint p3 = new Paint(Paint.ANTI_ALIAS_FLAG);

p1.setColor(Color.RED);
p2.setColor(Color.BLUE);
p3.setColor(Color.YELLOW);

canvas.drawArc(rect, 0, 60, true, p1);
canvas.drawArc(rect, 60, 60, true, p2);
canvas.drawArc(rect, 120, 60, true, p3);
canvas.drawArc(rect, 180, 60, true, p1);
canvas.drawArc(rect, 240, 60, true, p2);
canvas.drawArc(rect, 300, 60, true, p3);
canvas.rotate(180, getWidth()/2, getHeight()/2);
//canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, canvas.getWidth()/3,p1);



}
}


'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
리소스에 대해서 - Color  (0) 2015.10.13
리소스에 대해서 - Value  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
:

리소스에 대해서 - Color

android 2015. 10. 13. 16:10 |

리소스에 대해서 - Color


이전 소스를 이용하여 

values 폴더 이하에  colors.xml 새로 생성한다. 


colors.xml


main.xml


color를 리소스로 추가


실행해보면 textview배경화면이 빨강색으로 나온다.


java소스로 구현해보면


실행해보면 위와같다.


치수에 대한 리소스


치수는 6가지가 존재한다.

px : 화면의  점하나의 단위, 10개의 점이 수평되어 있으면 너비가 10px이다.

dip/dp : 160dip 기준으로 1dip = 1px 이다. 이것을 화면에 상대적인 밀도 독립 필셀이라고 한다. 

sp : 크기 독립적인 필셀

pt: : 물리적 단위 

in :  물리적 단위

mm : 물리적 단위



px 는 절대적은 수치이기 때문에 단말기마다 px 가 다르므로 대도록이면 배제해야 한다.


dp 는 단말기에 따라 유동적인 수치임


[Dip 구하는 공식]

pixel / ( Density / 160 ) = DIP

 

[Pixel 구하는 공식]

( DIP * ( Density / 160 ) ) + 0.5 = Pixel




Layout을 작성할때 XML 상에서는 DIP 단위를 사용할 수 있으나

Java 소스로 Layout을 작성할 때는 사용할 수 없다.

Pixel의 수치를 DIP로 변경하는 공식을 사용하여야 한다.

그러므로 위의 공식이 필요할 것이다.

 

위의 공식을 처리해 주는 유용한 Class도 존재한다.

 

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIPDIP값, getResources().getDisplayMetrics());

 

해당 applyDimmension() 함수를 사용하면 결과 값으로 Pixel 값을 전달해 주는 것이다. 

본 함수는 다양한 수치들을 모두 변환해 준다.



'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Value  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
:

리소스에 대해서 - Value

android 2015. 10. 13. 15:29 |

리소스에 대해서 -1편


새로운 안드로이드 프로젝트를 생성하면 기본적으로  res 폴더가 생성된다.

res아래  


strings.xml 더블클릭하여 

string 추가하여 저장한다. 


R.java에 string 추가되었는지 확인.


R.java에 추가된것을 알수있다. 


그럼 이렇게 자동으로 누가 R.java를 생성해주는것일까 ??

개발환경  설치 할때 ADT (android development toolkit)플러그인을 설치하여 바로 ADT가 모든 리소스에 대한 ID를 부여하고 R.java라는 파일을 생성해 주는 것이다.


그럼 추가한 리소스를 사용방법을 알아보자.


* .xml 을 통해 사용하는 방법

main.xml


위와 같이 xml에 추가


xml에 추가한 내용을 살펴보면 

형식: "@[package:]type/name"


@ : 리소스 참조의 시작을 알림

[package] : 리소스가 존재하는 패키지명을 입력한다 즉 @com.test.Resource:string/sample_string

길기때문에 패키지  내부에 있는 리소스의 경우 생략이 가능하다.

외부 패키지의 리소스를 참조할 때는 꼭 적어 주어야한다.!


해당 리소스의 형식(type) 을 적어준다. 리소스를 추가했을때를 생각해봐.

<string......>으로  시작했다..이것이 바로 type!!!이다.


리소스명 (name) : 리소스 추가시 적어 주었던 name을 적어주면 된다.

     ↑ type            ↑name



* java 소스에서 어떻게 리소스를 참고하는 방법

main.xml

xml에 추가하고


java 파일 소스를 작성해보자.


Textview의 문자를 변경하기위해서 리소스 ID를 주고 

ID 가 text_view 인 Textview에 R.string.sample_string 의 문자열로 변경하였다.


위와같이 R.java 가 존재함으로 R.string.sample_string 접근 가능하다.

위 실행결과는 위의 xml 실행결과와 같다.



'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Color  (0) 2015.10.13
[안드로이드] 룰렛  (2) 2015.09.29
Posted by 양승아
:

git 란

개발자료 2015. 10. 11. 18:50 |

Git 에 대해서


git 는 형상관리중 하나로 흔히 알고 있고 svn 과 비슷하지만, svn  과 다른점이 있다.

지금 부터 svn 과 비교하여 설명해 보겠다. 


svn 은 

작업공간 ----저장소 

git 는 

작업공간 --스테이지영역--로컬저장소--원격저장소


svn 은 commit 하면 저장소에 소스를 저장하여 지원한다.

git 는 commit 하면 로컬저장소에 저장이된다. 원격 저장소라는 곳에 연결되어 소스를 공유한다.

commit 하기 전에 스테이지영역(인덱스)  추가해야 된다!


만약 빌드를 svn 에 로그인페이지, css 파일을 동시에 빌드했다고 가정할때

로그인페이지 빌드를 미루게되어 revert 해야되면  css파일까지 빌드전으로 복구해애되는 단점이 있다,


git 은 빌드해야되는 파일만 스테이지 영역에 추가하고( git add) 로컬저장소에 commit  하면 된다,

부분적으로 commit할 필요 없는 경우에는  git commit -a 으로 모두 동시에 커밋하면 된다.

commt 마치면 다른사람에게 소스공유 하면된다, 이땐 git push  명령어 사용한다.


내 작업을 올리는데 오류가 발생하여 다른 사람들이 작업한 내용을 먼저 받아야 할때는 

git pull 명령어 사용한다, (원격저장소로부터 내려받기 fetch + 내려받은 데이터를 병합 merge)


branch!! 에 알아보자

svn 은 전체 디렉토리 구조를 내려받아야하고 직접 디렉토리를 이동해야된다. 병합도 위치와 리비전을 명시하고 다소 복잡하다.

git 은 전체 디렉토리로 내려받을 필요없고 브랜치전환시 작업파일들이 실시간으로 변경된다.


브랜치 만들기

git branch<name>

git checkout<name> 


브랜치 지우기

git branch -d <name>


브랜치 병합

git checkout master 

git merge branch


브랜치 목록

git branch

git branch --no-merged

git branch --merged (merge가 되었는지 안되었는를 구분)



rebase?

rebase 는 merge와 동일하게 하나의 브랜치를 다른 브랜치로 병합하는 기능이다. 

단 rebase는 작업 히스토리를 다른 브랜치에 차례대로 적용시킨다.


svn  은 최종 작업을 merge 하는데

     b1          b2          b3         b4

a   o ---------------------------o


b   o----------o-----------------o


rebase 는 

     b1          b2          b3         b4

a   o ---------v--------v--------o


b   o----------o--------v--------o


공동작업에서 깔끔한 히스토리를 계속 유지해주고 싶다면 rebase를 적극적으로 사용하는 것이 좋다.


 그럼 svn 과 차이점은 ?

* 로컬저장소가 존재한다.

* 커밋 이전에 스페이지영역에 추가하는 과정이 있다.

* git 은 각각의 버전을 스냅샷으로 저장한다


git의 특징들!!

* 작업중 브랜치를 변경해야 하는데 커밋하기 애매할때, 간단히 저장해 둘 수 있음.

* 커밋을 순서를 변경하거나 커밋 메시지 심지어는 커밋한 파일도 변경할 수 있음

* 로그를 자기 입맛대로 포맷팅 할수 있음

* 이전 커밋에 추가 할수 있음










'개발자료' 카테고리의 다른 글

CentOS6.0 아파치 설치  (0) 2016.04.08
Posted by 양승아
:

CentOs7에 nginx 설치 + tomcat 연동하기



#yum list 명령어후에 nginx 가 없다면 레파지토리 업데이트 한다!!

레파지토리 업데이트 명령어

#yum install epel-release

업데이트가 된후에

#yum install nginx 


서비스 시작

# service nginx start

서비스 종료

# service nginx stop


설치 기본 경로

/etc/nginx/


기본 설정 파일은 

/etc/nginx/conf.d/defaulf.conf 


vi /etc/nginx/conf.d/defaulf.conf 


server{} 안에 


#포트설정

listen       80 ;

#도메인설정    

server_name  localhost;


#웹루트

root   /usr/share/nginx/html


#tomcat 연동

     upstream backend {

        server  localhost:8080

     }

     location ~ \.jsp$ {

               proxy_pass      http://localhost:8080;

     }


저장하고 나오면 설정 끝!

http:localhost:80/index.html 실행시 페이지 나오면 nginx 설치 성공

웹루트에 index.jsp 를 만들고 

http:localhost:80/index.jsp  시 페이지 나오면 톰캣 연동 성공!




Posted by 양승아
:

[안드로이드] 룰렛

android 2015. 9. 29. 17:58 |
이미지로 룰렛 안드로이드 구현하기


<MainActivity.java>




<activity_main.xml>



'android' 카테고리의 다른 글

생명주기(작성중)  (0) 2015.10.28
안드로이드 스터디 내용 정리  (0) 2015.10.28
canvas (원)  (0) 2015.10.16
리소스에 대해서 - Color  (0) 2015.10.13
리소스에 대해서 - Value  (0) 2015.10.13
Posted by 양승아
:

Decorator Pattern (데코레이터 패턴)


데코레이터 패턴

- 데코레이터는 서브 클래스를 만드는 것을 통해서 기능을 유현하게 확장할 수 있는 방법을 제공한다.

- 한 객체를 여러 개의 테코레이터로 감쌀수 있다.

- 기존 코들르 수정하지 않고도 기능을 확장할 수 있다.  


단점 

- 데코레이터 패턴을 이용해 디자인을 하다 보면 답다한 클래스가 많아질 수 있음

- 겹겹이 애워싼 객체의 정체를 알기가 힘들다

- 상속을 통해 확장할 수도 있지만, 디자인 유연성 면에서는 별로 좋지 않다.


그럼 이제부터 데이레이터 패턴 사용 하지 않은 예를 들면 !!

카페에서 음료를 주문할때 음료하나에 시럽,우유,휘핑 등을 추가하는 경우가 있다.

이 행동을 구현하면 



- 음료를 나타내는 추상 메소드 Beverage 는 카페에서 판매되는 모든 음료는 이 클래스의 서브 클래스가 된다. 즉 Beverage 가 부모클래스 , 슈퍼클래스 이다. 

- beverage 라는 음료 클래스에 우유,두유,모카,휘핑 크림을 나타내는 인스턴스 변수를 추가한다.

- 첨가물에 첨부 여부와 첨가물을 설정한다

- cost() 에서 추가된 첨가물의 가격을 계산한다. 서브클래스에서 cost()메소드를 재구현한다.


자 근데 이런식으로 하면 문제점이 무엇인가 ?

첨가물 가격이 바뀔때 마다 기존 코드를 수정해야된다.

첨가물의 종류가 많아지면 새로운 메소드를 추가해야한다.

새로운 음료가 출시될 수도 있다. 그 중에는 첨가물이 들어가면 안되는 음료도 있다. !! (필요없는 첨가물 메소드 상속 받게됨)

손님이 모카를 두번 추가하면 어떻게 할것인가 ????


부모클래스와 자식클래스

- 자식클래스를 만드는 방식으로 행동을 상속 받으면 그 행동은 컴파일시! 완전히 결정되고 모든 서브 클래스에서 똑같은 행동을 상속 받아야한다.

- 하지만 구성을 통해 객체의 행동을 확장하면 실행 중에 동적으로 행동을 설정할 수 있다.



Decorator pattern 적용







- Beverage 는 가장 기본이 되는  Component 클래스이다. 

- 음료 종류마다 Beverage에 대한 구상 클래스를 하나씩 만든다. (DripCoffee,DripCoffee)

- 각각의 첨가물을 나타내는 데코레이터를 추가(Mocha, Milk )하고  cost(), getDescription() 를 구현해야한다.

- 각 데코레이터 안에는 Beverage 클래스가 들어있다.

- 데코레이터에는 구성요소에 대한 레퍼런스가 들어있는 인스턴스 변수가 있다!!! (private Beverage beverage)        




Beverage.java


DripCoffee.java

Espresso.java

CondimentDecorator.java

Milk.java

Mocha.java

StarbuckCafe.java


결과 


에스프레소, 우유$2.29

제목없음$3.21




'JAVA > Design patten' 카테고리의 다른 글

factory method pattern  (0) 2019.04.27
singleton-pattern  (0) 2019.04.27
옵저버 패턴의 정의  (0) 2015.08.21
Posted by 양승아
:

다형성

JAVA/JAVA 2015. 8. 28. 18:43 |

다형성


이전에 포스팅했엇는데 패턴 공부 하면서 다시한번 개념 잡기 위해 공부!!



//추상클래스 A
abstrct class A{
 int left,right;
 public void setInt(int left, int right){
  this.left = left ; 
  this.right = right ;
 }
 int sum(){
  return this.left + this.right;
 }
 public abstract void sum();
 public void run(){
    sum();
 }
}

class B extend A {
 public void sum(){
   System.out.println("+++sum :" +sum()); 
 }
}

class C extends A {
 public void sum(){
  System.out.println("---sum : " + sum )
 }
}
public class D {
  public static void execute(A a){
    System.out.println("실행결과");
    a.run();
  }
  public static void main(String[] arg){
   A a1= new B();
   A a2 = new C();
  
  a1.setInt(10,20);
  a2.setInt(10,20);

  execute(a1);
  execute(a2);
 
 }
}





'JAVA > JAVA' 카테고리의 다른 글

제네릭 메소드  (0) 2017.05.17
제네릭 개념 알기  (0) 2017.05.16
클라이언트 ip 구하기  (0) 2015.08.13
java foreach 반복문  (0) 2015.08.13
JAVA 앞뒤 공백제거 trim()  (0) 2015.08.13
Posted by 양승아
: