Text

  • TextView
    • dp 보다는 sp를 권장(디바이스의 기본 텍스트 사이즈에 따라 바뀌어야 하기 때문)
  • Plain text
    • 단순 text
  • Password
  • Password (Numeric)
    • 숫자만 입력 가능
  • E-mail
  • Phone
  • Postal Address
  • Multiline Text
  • Time
  • Date
  • Number
  • Number (Signed)
    • 부호 있는 수
  • Number (Decimal)
    • 십진법
  • AutoComplete TextView
    • 자동 완성 검색
  • MultiAutoCompleteTextView
    • 두개 이상의 문자열 자동 완성 검색
  • CheckedTextView
  • TextInputLayout
    • html 의 textarea 와 비슷

Buttons

  • Button
  • ImageButton
  • ChipGroup
  • Chip
  • CheckBox
    • 여러개 선택 가능
  • RadioGroup
    • radiogroup 내 radiobutton 이 있어야지 선택 가능
  • RadioButton
    • 딱 하나만 선택
    • radiogroup에 포함안되어 있으면 라디오 버튼의 의미가 없어짐
  • ToggleButton
  • Switch
  • FloatingActionButton
    • 화면에 둥둥 떠있는 버튼
    • 고정되어 있는 버튼

Widgets

  • View
    • div와 약간 비슷?
  • ImageView
  • WebVIew
  • VideoView
  • CalenderVIew
  • ProgressBar
  • ProgressBar (Horizontal)
  • SeekBar
  • SeekBar (Discrete)
    • 어디 위치인지 보여줌
  • RatingBar
  • SearchView
  • TextureView
  • SurfaceView
  • Horizontal Divider
  • Vertical Divider

Containers

Google

  • AdView
    • 앱에 광고 달기
  • MapView
    • 구글 맵

Legacy

  • GridLayout
  • ListView
  • TabHost
  • RelativeLayout
    • 상대에 따라 위치가 달라지는 레이아웃
  • GridView

'Study(Language) > Android' 카테고리의 다른 글

[안드로이드] titleBar 없애는법  (0) 2020.06.17
[안드로이드] 6대 레이아웃  (0) 2020.06.05
[안드로이드] 4대 컴포넌트  (0) 2020.06.03
[안드로이드] 매니페스트  (0) 2020.06.02

레이아웃 정의

  • 사용자 인터페이스를 위한 구조

종류

  • relative layout

  • linear layout

  • frame layout

  • table layout

  • listVIew 와 GridView

Linear Layout

  • 가로 또는 세로 정렬 레이아웃
  • 중첩 X, 지정 방향으로만 쌓임
  • width 는 %, px가 아닌 비율

Relative Layout

  • 자식 View와의 상대적인 위치
  • toRightOf : 오른쪽 배치
  • below : 아래 배치
  • alignParentLeft : 왼쪽 정렬
  • centerInParent : 중앙 정렬
  • 다중 Linear layout로 구성되어 있는것을 relative layout게 강력하지만 만들기 다소 어려움

Frame Layout

  • 모달같이 여러화면을 중첩으로 구현할때 사용
  • 가장 최근에 추가된 뷰만 보임
  • Fragement 동일한 위치에서 다양한 뷰를 교체로 표현하고 싶을 떄

Table Layout

  • html table 과 비슷 하지만 행과 열을 합칠수 없고 td역할 하는게 없음

ListView and GridView

  • 동일한 뷰를 안에 컨텐츠만 다르게 반복해야하는 경우
  • List : 상하로 펼쳐지는 것
  • Grid : 차곡히 좌에서 우로 펼쳐지는 것 레아이웃 넘으면 아랫줄로
  • for문 사용한 것과 같은 뷰 반복 효과

ConstraintLayout

  • linear 와 relative 로 레이아웃을 구현하기 다소 복잡한 면이 있어 constraintLayout을 많이씀

  • 중첩 가능

    <Button android:id="@+id/button1" ...
           app:layout_constraintRight_toRightOf="parent" />
  • 의미

    • layout 을 constraint로 할건데 parent의 오른쪽으로 배치할것임
  • 두개의 뷰를 연결하고 싶으면 chain사용

  • 배치 방법

    • 형태 - layout_constraint[기준1]_to [기준2]of=[viewId / parent]
    • 예시
      • layout_constraintLeft_toLeftOf
      • layout_constraintLeft_toRightOf
      • layout_constraintRight_toRightOf
      • layout_constraintRIght_toLeftOf
      • layout_constraintTop_toTopOf
      • layout_constraintTop_toBottomOf
      • layout_constraintBottom_toTopOf
      • layout_constraintBottom_toBottomOf
      • layout_constraintStart_toStartOf
      • layout_constraintStart_toEndOf
      • layout_constraintEnd_toStartOf
      • layout_constraitnEnd_toEndOf
  • 한쪽으로 치우치게 (bias)

    • 0~1값
    • default = 0.5
    • layout_constraintHorizontal_bias
    • layout_constraintVertical_bias
  • 레이아웃을 빠져나간 경우

    • default = false
    • layout_constraintedWidth = [true / false ]
    • layout_constraintedHeight = [true / false ]

주의사항

  • top/bottom/right/left 를 다 사용해야하지는 않지만 필수는 아니지만 레이아웃이 깨질수도 있어 확실하게 하기위해서는 네개다 명시하는 것을 지양해야함

  • MATCH_CONSTRAINT

    • 부모 뷰에 꽉맞추고 싶을 때

      <Button anroid:layout_width="wrap_content"
            // wrap_content 와 같은 기능
            app:layout_constraintWidth_min 
            app:layout_constraintHegith_min
            app:layout_constraintWidth_max
            app:layout_constraintHeight_max
            // 0 1사이 값을 입력해서 비율로 길이 결정 ex- 0.2
            app:layout_constraintWidth_percent
            app:layout_constraintHeight_percent
      >
  • CHAIN

    • 뷰끼리 연결시 간격을 정하고 싶은 경우 사용
    • 뷰끼리 연결할 떄
    • 수평 가장 왼쪽에 있는 값이 기준 (HEAD)
    • 요소
      • layout_constraintHorizontal_chianStyle
      • layout_constraintVertical_chainStyle
    • 스타일
      • CHAIN_SPREAD - 모든 여백을 같게함
      • CHAIN_SPREAD_INSIDE - CHAIN_SPREAD와 같지만 양끝은 부모에 붙임
      • CHAIN_PACKED - 묶어버리고 부모 여백을 같게함

cf
layout은 기본적으로 chain으로 연결되어있다 그래서 위아래로 연결하고 싶은경우
layout_constraintTop_toButtomOf 로 연결하면 위아래로 연결된다
내가 한 실수
layout_constraintBottom_toTopOf 까지 연결하면 위에 값이랑 아래값이 연결된다는 소리를 아니다

4대 컴포넌트란?

  • activity
  • service
  • receiver
  • provider

activity

  • 사용자에게 보이는 UI화면
  • activity 역할을 위해서는 자바의 Activity 클래스를 상속 받아야함
  • 액티비티의 생명주기 메소드를 재정의하여 원하는 기능 구현
  • 가장 많이 사용
  • 특징
    • 안드로이드 어플리케이션은 하나 이상의 액티비티를 가져야함
    • 두가지 액티비티 동시 display불가
    • 분할 가능, 타 액티비티 호출 가능

service

  • 백그라운드에서 실행되는 것
  • 화면에 보이지는 않지만 manifest에 등록해야함
  • 특징
    • 따로 화면이 없음
    • 한번 시작된 서비스는 백그라운드에서 종료되어도 실행
    • 모든 service클래스 상속 받아 사용
    • 네트워크를 통해 데이터 가져옴

content provider

  • 데이터 관리 및 다른 어플리케이션에 데이터 제공
  • 디비 관련 데이터 전달시
  • 특징
    • 파일 입출력, sql등으로 데이터 관리
    • provider을 통해 다른 어플리케이션에 데이터 전달 가능

broadcast receiver

  • 안드로이드의 이벤트와 반응관련 정보 받아 반응
    cf ) 브로드 캐스팅
  • 하나의 메시지를 받아 여러곳에 공유
  • push 알림

intent

  • 통신 수단 역할
  • 4가지의 구성요소(컴포넌트)간의 작업수행을 위한 정보전달 역할

영속성 관련 이슈

응답 값으로 엔티티를 직접 노출 한 경우

문제점

  • 엔티티의 모든 값 추가
  • 응답 스팩을 맞추기 위한 로직 추가
  • api스팩에 대한 변경에 대응하기 어려움

Fetch Join

장점

  • SQL 한번으로 연관된 엔티티를 함께 조회할 수 있어 SQL 호출 횟수를 줄여 성능 최적화 가능

단점

  • 1대 다 fetch join 페이징 불가능
  • 컬렉션 둘 이상의 패치조인 사용하면 안됨 ⇒ 데이터가 부정합하게 조회 될수 있음

ex)

em.createQuery(
    "select o from Order o join fetch o.member m join fetch o.deleveryd",Order.class
).getResultList();

distinct

  • jpa 의 distinct는 디비의 distinct 엔티티의 중복인 경우 중복을 걸러서 보내줌

페이징 처리를 하며 Collection 한계 돌파

  • ToOne(OneToOne, ManyToOne)모두 패치 조인

  • 컬렉션은 지연 로딩으로 조회

  • 지연 로딩을 최적화 하기위해 hibernate.default_batch_fetch_size (inquery 갯수)/ @BatchSize 둘중 하나 사용

  • @BatchSize : 개별 최적화

  • hibernate.default_batch_fetch_size : 글로벌 설정

  • 이 옵션을 사용하면 컬렉션이나, 프록시 객체를 한꺼번에 설정한 size만큼 IN쿼리로 조회

  • 한계 )

em.createQuery(
    "select distinct o from Order o" + 
    "join fetch o.member m "+ //order 입장 패치 가능
    "join fetch o.delivery d "+  // order 입장 패치 가능
    "join fetch o.orderItems oi " //order 입장 패치 불가능  ToOne관계 아님
    "join fetch oi.item i", Order.class)  // 1대n 관계 관련으로 패치조인 불가능
  • 해결책)
public List<orderDto> order(@RequestParam(value="offset", default
em.createQuery(
    "select o from Order o"+
    "join fetch o.member m" +
    "join fetch o.delivery d", Order.class)
    .setFirstResult(offset)
    .setMaxResults(limit)
    .getResultList();
)

결론

  • ToOne관계는 패치조인 사용
  • 나머지는 hibernate.default_batch_fetch_size 로 최적화 (max : 1000 min:100)

'Study(Language) > JPA' 카테고리의 다른 글

[JPA] 트렌젝션  (0) 2020.06.03

트랜잭션

트랜잭션의 성질

원자성

  • 한 트랜잭션 내에서 실행한 작업들은 하나로 간주한다. 즉, 모두 성공 또는 모두 실패

일관성

  • 트랜잭션은 일관성 있는 디비 상태를 유지

격리성

  • 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리

지속성

  • 트랜잭션을 성공적으로 마치면 결과가 항상 저장되야함

'Study(Language) > JPA' 카테고리의 다른 글

[JPA] 영속성  (0) 2020.06.03

DB

DELETE, TRUNCATE, DROP

  • DELETE - 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있으며 삭제 후 잘못한 것을 되돌릴 수 있다
  • TRUNCATE - 용량을 줄이고 인덱스 등 모두 삭제된다. 하지만 테이블은 삭제 되지 않고 데이터만 삭제한다 한꺼번에 다 지워야하며 삭제 후 되돌릴수없다
  • DROP - 테이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다

프로세스 vs 스레드

  • 프로세스 - 운영체제로부터 자원을 할당받는 작업 단위
  • 스레드 - 프로세스가 할당 받은 자원을 이용하는 실행 단위

멀티 스레드

  • 멀티 프로세스 기반으로 프로그래밍시 프로세스 간 공유자원이 없기에 동일 자원에 동시 접근 하는 일이 없다 하지만 멀티 스레딩 기반으로 프로그래밍 할때는 주의해야함
  • 장점 - 프로세스를 이용해 동시 처리하던 일을 스레드로 구현한 경우 메모리 공간과 시스템 자원 소모가 줄어듬
    • 스레드간 통신이 필요한 경우 별도의 자원을 이용하는 것이 아닌 전역 변수의 공간 또는 동적으로 할당된 공간인 heap 영역을 이용하는 데이터를 주고 받을 수 있다

1. 셸의 이해

1. 셸의 개념과 특징

(1)

-커널과 사용자간의 다리 역할

-사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할

-커널에서 분리된 별도의 프로그램이어서 다양한 종류의 셸이 존재

-사용자가 시스템에 로그인 하게되면 각 사용자에게 설정된 셸이 부여되면서 다양한 명령을 수행 가능(사용자에게 셸을 부여하지 않으면 로그인을 하더라도 명령 수행 불가능)

 

(2)주요 셸의 특징

-Bourne Shell : 유닉스 버전 7의 기본 셸

-bash : 현재 리눅스의  표준 셸

명령어 문법 ‘sh’와 호환됨, 명령어 히스토리,명령어 완성기능, 히스토리치환 , 명령어

편집 지원

-C Shell : C언어를 기반으로 만들어졌고 강력한 프로그램 작성기능을 가짐

           히스토리기능, 별명기능, 작업제어 기능포함

           명령행 편집기능 지원하지않음

-tcsh : The Enhanced C Shell

           Csh의 기능을 강화시킴 명령어 완성기능, 명령행 편집 기능 추가 지원

-ksh : 본셸을 확장하고 C셸의 기능을 추가

작업제어, 앨리어스(별명기능),히스토리기능, viEmacs스타일의 명령행 편집기능, 명령행 완성기능 제공

 

2. 셸확인과 변경

(1)셸확인

-환경변수 SHELL을 통해 확인

-명령프롬프트 상에 ‘echo $SHELL’

-‘chsh-l’ (change shell)or ‘cat /etc/shells : 다른 셸을 사용하기위해 변경가능한 셸확인

 

(2)셸의 변경

-‘chsh’ : 사용자가 로그인 셸은 변경

           셸을 절대경로로 입력하면 변경가능 대신 적용은 다음 로그인부터 가능

 

(3)사용자의 로그인 셸 정보확인

- /etc/passwd7번쨰 필드에 기록됨

-‘$ grep 사용자명 /etc/passwd’로 확인가능

 

3. 셸 환경설정

(1)셸 변수

- 특정 셸에서만 적용되는 변수

-리눅스에서는 명령행에서 변수명 =형태로 지정하고 변수값 출력시 변수명 앞에 $붙이고echo명령으로 확인가능

 

(2)환경 변수  

-프롬프트 변경, PATH변경 등과 같이 셸의 환경을 정의하는 중요한 역할을 수행하는 변수

-미리예약된 변수명을 사용

-evn : 현재설정된 전체 환경변수 값 확인명령

-특정환경변수의 값 확인과 설정은 일반 셀변수 설정과 같다

 

(3)주요 환경변수

           변수 : 내용

-> HOME: 사용자의 홈 디렉터리

->PATH: 실행파일을 찾는 디렉터리경로

->LANG: 셸사용시 기본으로 지원되는 언어

->TERM: fhrmfldsgks 터미널 종류

->PWD:사용자의 현재 작업 디렉터리

->SHELL:사용자의 로그인셸

->USER:사용자의 이름

-> DISPLAY :X에서 프로그램 실행시 출력되는 창

->PS1: 프롬프트 변수

->PS2:2차프롬프트 변수

->HISTFILE:히스토리파일의 절대경로

->HISTSIZE:히스토리 파일에 저장되는 명령어의 개수

->HISTFILESIZE:히스토리 파일의 파일 크기

->HOSTNAME:시스템의  호스트명

-> MAIL: 도착한 메일이 저장되는 경로

->  TMOUT: 사용자가 로그인한후 일정시간동안 작업을 하지 않을경우 로그아웃 시키는 시간의 단위는 초

->UID: 사용자의 UID

(3)환경 변수의 사용 및 변경

-환경변수를 사용해 각 사용자의 고유의 셸환경 구축 및 명령어와 별합하여 사용가능

Cf)주요 프롬프트 형식

           \d : ‘요일 월 일 형태로 날짜 표시

           \h: 호스트 이름 표시

           \s:사용중인 셸의 이름을 표시

           \t: 24시형태의 현재시간을 표시

           \T:12시 형태의 현재시간을 표시

           \@:12시형태의 현재시간에 AM/PM을 추가로 표시

           \u:현재 사용자의 이름을 표시

           \w: 현재 작업 디렉터리를 절대경로로 표시

           \W: 현재 작업 디렉터리의 전체경로중 마지막 디렉터리만 표시

           \!: 현재 명령의 히스토리 넘버를 보여준다

 

4. 배시셸의 주요기능     

(1) 명령행 완성기능

-명령시 글자 일부분만 입력하고[TAB]키를 눌러나머지 부분을 자동 완성 시키는 기능

-첫글자입력후 [ TAB]여러 개 존재시 다시한번  누르면 확인가능

 

(2)명령어 History 기능

-위아래 방향키를 이용해 검색 및 편집해 특정명령어를 반속해서 수행가능

-history명령은 !로 대처 가능

-명령입력하면 히스토리 리스트에 있는 명령어들이 출력됨

-사용법 : $ history[숫자값]

-!와 히스토리 명령문

           !! : 마지막에 사용한 명령 실행

           !n :n번쨰 사용한 명령 실행

           !-n:역으로 n번째 사용한 명령실행

           !문자열: 가장최근 사용한 명령중 문자열로 시작하는 명령 찾아 실행

           !?문자열? : 가장최근명령중 문자열을 포함하고 있는 명령을 찾아 실행

           ^문자열1^문자열2 : 마지막에 사용한 명령문의 문자열 1’문자열2’로대체후 실행

-히스토리 관련 환경변수

           변수명 : 설명

           HISTSIZE : 히스토리 스택의 크기가 지정되어 있는 변수

           HISTFILESIZE : 실질적인 히스토리 파일의 크기

           HISTFILE :히스토리 파일의 위치

           HISCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수

           HISTIMEFORMAT : history명령 실행시 출력되는 시간형식을 지정할떄 사용

-관련 파일 : .bash_history

-> 사용자들이 입력했던 명령이 기록되는 파일

-> 파일명이 ‘.’로 시작되어 숨겨진 파일형태로 존재하고 로그인해 내린 명령들은 로그아웃할 때 기록됨 그래서 다음 로그인시 확인가능

-history관련키

-> [Ctrl]+[r] : 특정문자 입력시 최근 그문자로 수행한 명령 보여줌

->[ESC] [.] : 최근 사용한 명령행을 붙여주는데 한번실행할때마다 하나씩 역으로 호출됨

->[ALT]+[.] :두키를 계속누르면 최근 사용된 인자를 하나씩 호출됨

 

(3)alias 기능(별명)

-어떤 명령 지정해 놓으면 사용자가 그 명령 실행시 alias로 지정해 놓은 명령이 대신 실행됨

-alias만 실행시 별명이 설정된 목록 확인가능

-unalias는 설정된 명령 해제

-사용법 : $alias [별명=’명령어’]

           $unalise 별명

(cf) alias를 지정했을 때 원래 명령을 설정 해제하지 않고 명령을 일시적으로 실행하려면 which명령을 이용해 해당 명령어의 위치를 파악후 절대 경로 로 실행하는 방법과 명령어앞에 \을 붙이는 방법이 있다

셸상태에서 설정한 alias는 재로그인하거나 시스템 부팅시 다시 설정해야 해서 ㅈㅣ속적으로 사용하려면 홈디렉터리 안에 있는 /bashrc에 설정하면된다)

 

(4)명령행 편집 기능

-주요 커서 이동 명령

           [ctrl]+[b] : 커서를 왼쪽으로 한칸이동

           [ctrl]+[f] : 커서를 오른쪽으로 한칸 이동

           [esc][b]:커서를 왼쪽으로 한단어 이동

           [esc][f] : 커서를 오른쪽으로 한 단어 이동

           [Ctrl]+[a] : 맨왼쪽으로 이동

           [Ctrl]+[e] : 맨오늘쪽으로 이동

-주요 삭제 명령

           [ctrl]+[d] : 커서 오른쪽 한 글자 삭제

           [esc] [backspace] : 커서 왼쪽 한 단어 삭제

           [esc] [d] : 커서 오른쪽 한단어 삭제

           [ctrl]+[k]: 커서 왼쪽 행 전체 삭제

           [ctrl]+[u] :행전체삭제

           [ctrl]+[y] : 삭제취소

 

(5)명령 대체 기능

-특정 명령의 결과를 다른 명령어의 인자값으로 사용하는 것

-$() ‘’를 이용해 대체가능

 

(6)그룹 명령 실행

- ;  :  단순히 한줄에 여러명령을 나열하기 위해 사용하고 입력순서대로 순자처리됨

- || : 논리적 or이라고 부름 명령성공시 결과출력 그렇지않으면 뒤에 명령 실행

- && : 논리적 and라고 부름 앞에 명령이 성공이여야만 다음 명령수행됨

-ex : $ls;find/-type>list.txt  -> find/-type 의 명령결과를 list.txt파일로 저장

 

(7) 표준입출력 제어 기능

-표준 입력과 출력이라는 이름의 데이터 흐름을 말함

-종류

->표준 입력(Standard Input) : 입력을 담당하는 키보드 약어 stdin 셸에서는 0으로 표시

->표준 출력(Standard Output) : 명령 결과값이 보여지는 화면 약어 stdout 셀에서는 1(생략가능)으로 표시

->표준 에러(Standard error) : 에러값이 보여지는 화면 약어 stderr 셸에서는 숫자 2

 

(8) 라다이렉션

-표준 입출력이 아닌 다른입출력으로 변경시 사용

-출력결과 파일로 저장하거나 파일의 내용을 프로세스의 입력으로 사용하는 기법

-종류

           > : 프로세스출력을 표준출력에서 다른 출력으로 변경

           >> : 프로세스의 출력을 지정한 출력에 추가

<< : 기호 뒤에 지정한 문자열을 입력받아 해당 문자열이 나오기 전까지의 표준 입력을 삼아 해당 내용을 출력

 

(9)파이프 |

-어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것

-여러 개의 파이프 라인을 구성하면 데이터들은 파이프 라인에 따라 흐르게됨

-사용법

$명령어1 | 명령어 2 : 명령어 1의 결과값이 명령어 2의 입력으로 사용됨

- “tee

-> 파이프 연결출력을 두갈래로 나눌 때 사용하는 명령어

-> 사용법 : $tee [option] [파일]

-> 옵션

           -I : 인터럽트를 무시하도록 한다

           -a : 지정된 파일로 출력을 덮어쓰지않고 파일뒤에 내용을 추가

Ex) $find /-name ‘*.txt’ 2>error.txt >result.txt

=>결과값은 result.txt에 저장하고 에러값은 error.txt에 저장

 $find /-name ‘*.txt’ 2>error.txt

=> 결과값은 화면에 출력하고 에러는 error.txt파일에 저장

 

2. Shell Programming

- 셀프로그래밍  : 셸에서 사용되는 여러 명령어들을 모아 하나의 파일로 만드는 과정

(1)셸 스크립트 작성 방법

           1. vi편집기를 사용하여 파일생성 -> $vi who.sh

           2. 첫번째 줄은 사용할 셸을 명시 -> #!/bin/bash

           3. 두번째 줄부터 원하는 명령 및 구분 입력

           4. 스크립트를 실행가능한 파일로 만듦 -> $chmod 755 who.sh

           5. 실행 시킨다   -> $./who.sh

            Cf) ./는 현재 디렉터리 안에 있는 해당파일을 실행시키라는 것

           실행권한 없이도 실행하는 방법

$sh who.sh

$soure who.sh

$ . who.sh

 

2. 셸 프로그래밍 문법

(1)주석

#

(2)변수

-변수형은 문자열만 가지며 변수형 선어는 필요가 없다

-사용법

Var=var

-기타변수 대응법

           종류 : 설명

           ${name} : name이라는 변수에 들어있는 값으로 치환

${name:=value} :  namenull이면 value로 할당하여 지정 name값이 있으면 그값을 사용

${name:+value} : 기존의 name null이 아니면 value를 사용하지만 name에 저장하지는 않는다

${name:-value} :  기존의 name값이 있다면 그값을 사용하고 값이없으면 value 값을 대입한다. Namevalue값을 저장하지는 않음

${name:?value} : 기존에 name값이 있다면 기본값으로하고 없으면 error을 내면서 value값을 보여준다

${#name} : name의 문자열 길이 반환

${name:offset} : name값에서 offset만큼 삭제후 값을 반환

${name:offset:length} : name값에서 offset만큼 삭제한후 length만큼 센뒤 값을 반환

-관련 환경변수

$IFS : 입력필드 구분자로 셸 상에서 입력을 읽어 들일때 글자를 구분하기 위한 목적으로 사용되는 문자 목록을 말한다. 스페이스, , 개행문자 사용

-아규먼트 변수(위치 매개변수)

-> 이변수는 매개변수를 불러올 때 스트립트의 명령행 인자를 담당

           $0 : 실행된 셸스크립트명

           $1 : 스크립트에 넘겨진 첫번째 아규먼트

           $2 : 스크립트에 넘겨진 두번쨰 아규먼트

           $# : 스크립트에 넘겨진 아규먼트의 개수

           $$ : 셸스크립트의 PID

$* : 스크립트에 전달된 인자 전체를 하나의 변수에 저장하면 IFS변수의 첫번째 문자로 구분

$@ : $*와 동일하지만 IFS변수를 사용하지 않음

$? : 실행한뒤반환 값 참이면 0거짓이면 1

$- : 현재 shell이 호출될 때 사용한 옵션

-Shell변수의 출력과 제거

           명령 : 설명

           set : 현재 정의되어 있는 모든 변수와 그값을 출력

           env : export된 변수의 값만 출력

export: 특정 변수의 범위를 환경 데이터 공간으로 전송하여 자식 프로세스에서도 그 특정 변수를 사용할수 있게함

           upset : 선언된 변수 제거

 

(3) echo문과 escape문자

-echo문은 라인을 제어하는 명령 해석기 -e옵션과 같이 \로 시작하는 escape특수문자 사용가능

-escape특수 문자

-> \f : 앞문자열 만큼 열을 밀어 이동

->\n : 새로운 줄로 바꿈

->\r : 앞문자열의 앞부분부터 뒷문자열만큼 대체하고 반환

->\t : 탭만큼 띄움

-> \\ :\를 표시

(4)간단한 조건식

-사용법

           Test 표현식

           [ 표현식 ]

-표현식

           문자열비교

           산술비교

           [ expr1 -eq expr2 ] : 두 표현식이 같다면 참 (Equal)

           [ expr1 -ne expr2 ]: 두표현식이 같지않다면 참(not equal)

           [ expr1 -gt expr2 ] : expr1>expr2면 참(greater then)

           [ expr1 -ge expr2 ] : expr1>=expr2이면 참(greater equal)

           [ expr1 -lt expr2 ]: expr1<expr2면참(less then)

           [expr1 -le expr2 ]:expr1<=expr2 면 참(less equal)

           [ ! expr ] : expr이 참이면 거짓, 거짓이면 참

           [ expr1 -a expr2 ] : expr1 AND expr2의 결과

           [ expr1 -o expr2 ] : expr1 OR expr2의 결과

파일의 조건

 

3. 조건문

(1)if

-사용법

           If [조건1]

           then

                      실행문장1

           elif [조건2]

           then

                      실행문장2

           else

                      실행문장3

           fi

(2)case

-사용법

           case 문자열

           in

                      정규식)명령어1;;

                      정규식)명령어2;;

                      *)해당하지않는 경우

           esac

(3)select

-사용법

           select 변수 in 1,2,,,,

                      do 실행문장

                      done

4. 반복문

(1)for

-사용법

           for 변수 in 1, 2

           do 실행문장

           done

(2)while

-사용법

           while 조건문

           do 실행문장

           done

(3)until(while 과 같지만 조건이 반대일때실행)

-사용법

           until 조건문

           do 실행문장

           done

5. 함수

-사용법

(function) 함수이름       //function 은 생략가능

{ command }

6. 패턴과 패턴비교

-일종의 문자열을 연산한 것으로 특정 패턴을 놓고 변수의 문자열 값이 일부분이라도 이 패턴과 일치하는지 검사할때사용

-종류

${variable#pattern} : 처음부터 패턴과 맞는 variable의 부분을 찾아 이중 가장 작은 부분제거하고 나머지 반환

${variable##pattern}: 처음부터 패턴과 맞는 variable부분을 찾아 가장 큰 부분을 제거하고 나머지 반환

${variable%pattern}:끝에서부터 패턴과 일치하는variable의 최소부분 제거하고 나머지반환

${variable%%pattern}: 끝에서부터 패턴과 일치하는 variable의 최대부분을 제거하고 나머지 반환

1. X윈도의 개념 및 특징

1.종류

-XFree86

-X.org

 

2.특징

-네트워크 프로토콜에 기반을 둔 그래픽 사용자 인터페이스 환경

-디스플레이 장치에 의존적이지 않고, 서로 다른 이 기종을 함께 사용할수 있다

-다양한 종류의 컴퓨터에서 구동될 수 있을 정도로 이식성이 높다

-그래픽 환경에 필요한 자원들이 특정형태로 정의되어 있지않아 사용자가 원하는대로 변경가능

-구조 : 클라이언트/ 서버 구조

->서버 : 그래픽하게 보여주는 하나의 시스템

->클라이언트: X서버 위에 동작하는 일종의 응용프로그램

 

3. XlibX관련 라이브러리

-Xlib : Cdjsdjfh 구현된 클라이언트 라이브러리로 X서버와 대화를 해주는 역할

-개발자들은 관련 프로토콜에 관한 자세한 정보 없이도XLib를 통해 다양한 프로그램을 구현할수 있다

-XCBXlib에 비해 향상된 쓰레딩 기능을 지원하고, 확장성이 뛰어나다 또한 라이브러리의 크기가 작고 단순하여 직접 x프로토콜에 접근도 가능하다

 

2. X윈도설정과 실행

-X위도 사용시 가장 중요한 것은 그래픽 카드 설정이다

1. X윈도 실행방법

(1)Runlevel 5

-> 부팅시 바로 X원도 사용

(2)Runlevel 3

-> 텍스트 모드(runlevel 3)에서 실행하는 방법이다

-> 사용자 계정으로 먼저 로그인후  startx명령을 이용해 X윈도 실행

2. 디스플레이 매니저

-종류 : XDM(X Display Manager), GNOME에서 사용하는 GDM(GNOME Display Manager), KDM(KDE DisplayManager)

3. startx

- X윈도를 실행시키는 스크립트로 시스템환경을 초기화 시키고 시작하는데 필요한 여러 프로그램을 호출하고 최종적으로는 xinit를 호출하는 명령어

-사용법 : $startx[option]

-옵션

           -- : 명령행의 인자값을 xinit에 넘겨준다

3. 데스크톱 환경

-데스크톱 환경 : GUI환경을 이용하기 위해 사용자에게 제공되는 인터페이스 스타일을 말한다

-보통 윈도 매니저를 포함하여 파일관리자, 아이콘, , 도구모음,폴더, 배경화면,데스크톱위젯을 제공, Drag&Drop과 프로세스 간의 통보와 같은 기능도지원

-GNOME, KDE,Xfree,LXDE등 과 같은 환경이 있다

 

-종류

1. KDE환경(K Desktop Environment)

-‘yum install konq-plugins라고 입력하면 패키지 다운가능

-주요 프로그램

-> konqueror : 웹 브라우저 및 파일관리 프로그램

-> dolphin : 파일 관리 프로그램

->kwrite: 텍스트 편집기 프로그램

-> Gwenview : 이미지 뷰어 프로그램

-> KColorChooser : 색상 선택 프로그램

-> KColorEdit: 색상 파렛트 편집 프로그램

->KlconEdit : 아이콘 편집 프로그램

->KRuler: 스크린자 프로그램

->KSnapshot: 스크린캡처 프로그램

->KolourPaint : 페이트 프로그램

->Okular: 문서 뷰어 프로그램

->KGet: 다운로드 관리자 프로그램

->KMail : 메일 클라이언트 프로그램

-> Konsole: 터미널 프로그램

->KDiskFree: 디스크 사용량 뷰어 프로그램

->KSystemLog: 시스템 로그 뷰어 프로그램

->KUser: 사용자 관리 프로그램

->Krfb: 데스크톱 공유 프로그램

->Dragon Player: 비디오 재생 프로그램

2. GNOME(GNU Network Object Model Environment)

-GNU에서 만든 공개형 데스크톱환경-

-단순하고 사용하기 쉽게 동작하는 것이 목표

-재사용이 쉽고 소스코드 공개, 특별한 기술 없이도 손쉽게 하용가능

-자유로운 프로그래밍 언어 허용

-주요 프로그램

->nautilus : 파일관리 프로그램

->Cheese : 웹캠을 이용한 사진 및 비디오 추출 프로그램

->GIMP : 이미지 편집, 변환,생성 프로그램

->Rhythmbox: 인터넷 라디오 및 음악 연주 프로그램

-> gThumb: 이미지 뷰어 및 편집 프로그램

-> gnome-terminal : 터미널 프로그램

-> gedit: 문서 편집 프로그램

->evince: 문서 뷰어 프로그램

->totem : 사운드 및 비디오 플레이어

-> gnome-system-monitor: 프로세스 및 자원 모니터링 프로그램

-> sound-juicer : CD플레이어 프로그램

-> evolution: 메일, 달력,주소록 관련 프로그램

4. 윈도 매니저

-X위도 환경에서 윈도의 배치와 표현을담당하는 시스템 소프트웨어

-대부분의 윈도 매니저 프로그램은 데스크톱 환경 구성에 도움을 주기위해 설계됨

-종류 : GNOME에 사용되는 Mutter Metacity, KDE에 사용되는 KWinKWM, twm,dxwm,hpwm,tekwm,olwm,pswm,vtwm,tvtwm,olvwm,Blackbox 등등

5. X윈도 활용

1. 원격지에서 X클라이언트 이용

-X윈도는 X서버와 X클라이언트가 독립적으로 동작하는 네트워크 지향 시스템이기 때문에 원격지의 X클라이언트를 다른 시스템의 X서버에서 실행 시킬수 있다.

(1)xhost

-X서버에 접근할 수 있는 클라이언트를 지정하거나 해제하는 명경어

-사용법 : #xhost [+|- ] [IP주소 or도메인명]\(딱히 기호가없으면 +로 간주)

Ex) #xhost +183.333..43.22 -> 해당번호 접속을 허가한다

(2)DISPLAY

-X클라이언트 프로그램이 실행될떄 표시되는 창이 설정되어 있는 환경변수

Ex) #export DISPLTY=”222.333.43.133:0.1” -> X클라이언트 프로그램을 해당주소의 첫번째 실행된 X서버의 두번쨰 모니터로 전송

(3)xauth

-xhost를 사용해 전체 클라이언트를 허가하거나 또는 IP주소 및 호스트명으로 허가한다고해도IP변경 등의 방법을 사용해 원치않는 불필요한 클라이언트가 접속할수 있다 이경우 해결하기위해 xauth를 사용한다

-X접근허가(authority)파일 관련도구

6. 윈도 응용 프로그램

1.GIMP(gnu Image Manipulation Program)

-사진이나 그림 편집하는 자유 소프트웨어

2. Totem

-GNOME데스크톱 기반의 Movie Player이다

3. KMid

-미디 및 노래방 파일 플레이어

4.ImageMagic

-비트맵 이미지를 보여주고 생성 및 편집이 가능하도록 지원해주는 프로그램 패키지

5.ego

-GNOME데스크톱에서 제공하는 이미지 뷰어 프로그램

6. kdegraphics

-KDE에서 제공하는 그래픽 관련 프로그램 패키지

7. Rhythmbox

-GStreamer media Framewor에 기반을 둔 통합형 음악 관리 프로그램

8. evince

-멀티 페이지 문서 프로그램으로 PDF,PS,EPS지원

9. LibreOffice

-무료로 배포되는 오피스 프로그램 패키지로 워드프로세서인 LibreOffice Writer,프레젠테이션 프로그램인 LibreOffice Impress, 스프레드시트 프로그램인 LibreOffice Calc,드로잉프로그램인 LibreOffice Draw등으로 구성되어 있다

+ Recent posts