반응형

운영체제 개념

사용자가 컴퓨터의 하드웨어를 보다 쉽게 사용할 수 있도록 인터페이스를 제공해 주는 소프트웨어

운영체제 특징

  • 사용자 편리성
  • 인터페이스
  • 스케줄링
  • 자원 관리
  • 제어 기능

운영체제 기능

  • 제어 프로그램
    • 감시 프로그램
    • 작업 제어 프로그램 : 작업의 연속 처리를 위한 스케줄 및 시스템 자원 할당 담당
    • 데이터 관리 프로그램 : 주기억장치와 보조기억장치 사이의 데이터 전송과 보조기억장치 유지보수
  • 처리 프로그램
    • 언어 번역 프로그램 : 어셈블러, 컴파일러, 인터프리터
    • 서비스 프로그램 : 링커, 정렬/합병 프로그램, 라이브러리, 유틸리티 프로그램
    • 문제 프로그램 : 특정 업무 해결을 위해 사용자가 작성한 프로그램

커널의 기능

    • 사용자가 입력시킨 명령어 라인을 읽어 필요한 시스템 기능을 실행시키는 명령어 해석기
    • 시스템과 사용자 간의 인터페이스 제공
  • 커널
    • 운영체제의 핵심이 되는 기능들이 모여 있는 프로그램
    • 컴퓨터가 부팅될 때 주기억 장치에 적재된 후 상주하면서 실행
    • 프로그램과 하드웨어 간의 인터페이스 역할
    • 기능
      • 프로세스 관리 : 프로세스 스케줄링 및 동기화 관리, 프로세스 생성과 제거, 시작과 정지, 메시지 전달
      • 기억장치 관리 : 메모리 할당 및 회수
      • 주변장치 관리 : I/O 장치 스케줄링
      • 파일 관리 : 파일 관리 파일 CRUD

운영체제 종류

  • 윈도우즈 계열
    • GUI 제공
    • 선점형 멀티태스킹 방식 제공
    • 자동감지 기능 제공 : 하드웨어 설치 시 필요한 시스템 환경을 자동으로 구성
    • OLE(Object Linking and Embedding) 사용 : 개체를 현재 작성 중인 문서에 자유롭게 연결 또는 삽입하여 편집할 수 있는 기능 제공
  • 리눅스/유닉스 계열
    • 대화식 운영체제
    • 다중 작업
    • 다중 사용자
    • 이식성
    • 계층적 파일 시스템 제공
  • 맥 : 매킨토시용으로 개발한 GUI 운영체제
  • 안드로이드 : 휴대용 장치를 위한 운영체제와 미들웨어, UI 그리고 표준 응용 프로그램을 포함하고 있는 운영체제, 리눅스 커널 위에서 동작

TODO

  • 링커란?
  • OLE란?
반응형

'CS > OS' 카테고리의 다른 글

5. 교착상태(Deadlock)  (0) 2023.11.19
4. 프로세스 스케줄링  (2) 2023.11.18
3. 프로세스  (0) 2023.11.09
2. 메모리 관리  (0) 2023.11.08
반응형

문제 링크

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

풀이 ) 우선순위큐

문제 조건에 따라 우선순위큐에 넣었다가 빼주면된다.

뺄 때 조건은 절댓값이 같을 때는 작은값 즉 음수를 꺼내고, 절댓값이 다를때는 절댓값이 작은값을 꺼내주면 된다.

 

import java.io.*;
import java.util.PriorityQueue;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder answer = new StringBuilder();

        int n = Integer.parseInt(br.readLine());

        PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2)->{
            if(Math.abs(o1) == Math.abs(o2)) {
                return o1-o2;
            } else {
                return Math.abs(o1)-Math.abs(o2);
            }
        });
        while(n-- > 0) {
            int x = Integer.parseInt(br.readLine());

            if(x == 0) {
                if(pq.isEmpty()) {
                    answer.append(0).append('\n');
                } else {
                    answer.append(pq.poll()).append('\n');
                }
            } else {
                pq.offer(x);
            }
        }

        System.out.println(answer.toString());
    }
}
반응형
반응형

2장 객체 생성과 파괴

 

아이템 6. 불필요한 객체 생성을 피하라

 

  • 생성자 대신 정적 팩토리 메서드를 사용해 불필요한 객체 생성 회피 가능

    Boolean(String);			// java 9에서 사장
    
    Boolean.valueOf(String);
    
  • 캐싱하여 재사용을 통해 성능 개선

    static boolean isRomanNumeral(String s) {
        return s.matches("^(?=.)M*(C[MD]|D?C{0,3})"
                        + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$")
    }
    
    public class RomanNumerals {
        
        private static final Pattern ROMAN = Pattern.compile(
            "^(?=.)M*(C[MD]|D?C{0,3})"
            + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"
        );
        
        static boolean isRomanNumeral(String s) {
            return ROMAN.matcher(s).matchers();
        }
    }
    

    의도치 않은 오토박싱 회피

 

TODO

  • 정규표현식
  • 유한 상태 머신
  • 지연 초기화
  • 어댑터 : 실제 작업은 뒷단 객체에 위임하고, 자신은 제2의 인터페이스 역할을 해주는 객체
  • 방어적 복사
반응형

'Java > OOP' 카테고리의 다른 글

[Effective Java] 2장. 아이템5  (0) 2022.07.17
[Effective Java] 2장. 아이템4  (0) 2022.07.16
[Effective Java] 2장. 아이템3  (0) 2022.07.16
[Effective Java] 2장. 아이템2  (0) 2022.07.15
[Effective Java] 2장. 아이템1  (0) 2022.07.14
반응형

2장 객체 생성과 파괴

 

아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

 

사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않음

 

의존 객체 주입 패턴

인스턴스 생성 시 생성자에 필요한 자원을 넘겨주는 방식

 

예시

public class SpellChecker {
    
    private final Lexicon dictionary;
    
    public SpellChecker(Lexicon dictionary) {
        this.dictionary = Objects.requireNonNull(dictionary);
    }
}

 

특징

  • 장점

    • 유연성
    • 테스트 용이성 개선
  • 단점

    • 큰 프로젝트에서 프로젝트를 어지럽게 만듦 => 의존 객체 주입 프레임워크 사용

 

TODO

  • 한정적 와일드카드 타입
반응형

'Java > OOP' 카테고리의 다른 글

[Effective Java] 2장. 아이템6  (0) 2022.07.18
[Effective Java] 2장. 아이템4  (0) 2022.07.16
[Effective Java] 2장. 아이템3  (0) 2022.07.16
[Effective Java] 2장. 아이템2  (0) 2022.07.15
[Effective Java] 2장. 아이템1  (0) 2022.07.14
반응형

2장 객체 생성과 파괴

 

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

 

추상 클래스 한계

  • 하위 클래스를 만들어 인스턴스화 가능

 

private 생성자 장점

  • 인스턴스화 방지
  • 상속 불가

 

예시

public class UtilityClass {
    
    // 기본 생성자 생성 방지(인스턴스화 방지용)
    private UtilityClass() {
        throw new AssertionError();
    }
}

 

반응형

'Java > OOP' 카테고리의 다른 글

[Effective Java] 2장. 아이템6  (0) 2022.07.18
[Effective Java] 2장. 아이템5  (0) 2022.07.17
[Effective Java] 2장. 아이템3  (0) 2022.07.16
[Effective Java] 2장. 아이템2  (0) 2022.07.15
[Effective Java] 2장. 아이템1  (0) 2022.07.14
반응형

2장 객체 생성과 파괴

 

아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라

 

싱글턴

인스턴스를 오직 하나만 생성할 수 있는 클래스

 

방식

  1. public static final 필드 방식

    public class Elvis {
        
        public static final Elvis INSTANCE = new Elvis();
        private Elvis() { ... }
    }
    
    • 장점

      • 싱글턴임이 API에 명백히 드러남
      • 간결함
    • 단점

      • 리플렉션 API AccessibleObject.setAccessible( )을 사용해 private 생성자 호출 가능
      • 직렬화 시 모든 인스턴스 필드를 transient이라 선언하고, readResolve( )를 제공해야 함 (하지 않는 경우 역직렬화 시 새로운 인스턴스 생성)
  2. 정적 팩토리 방식

    public class Elvis {
        
        private static final Elvis INSTANCE = new Elvis();
        private Elvis() { ... }
        public static Elvis getInstance() {
            return INSTANCE;
        }
    }
    
    • 장점

      • API를 바꾸지 않고 싱글턴이 아니게 변경 가능
      • 정적 팩토리를 제네릭 싱글턴 팩토리로 만들 수 있다.
      • 정적 팩토리의 메서드 참조를 supplier로 사용 가능
    • 단점

      • 리플렉션 API AccessibleObject.setAccessible( )을 사용해 private 생성자 호출 가능
      • 직렬화 시 모든 인스턴스 필드를 transient이라 선언하고, readResolve( )를 제공해야 함 (하지 않는 경우 역직렬화 시 새로운 인스턴스 생성)
  3. 열거 타입 방식

    public enum Elvis {
        
        INSTANCE;
    }
    
    • 장점

      • 직렬화 상황이나 리플렉션 공격에서도 제2의 인스턴스 생성 방지
    • 단점

      • Enum 외의 클래스 상속 시 사용 불가

 

TODO

  • API를 바꾸지 않고 싱글턴이 아니게 변경
  • 제네릭 싱글턴 팩토리
  • Serializable.readResolve()
반응형

'Java > OOP' 카테고리의 다른 글

[Effective Java] 2장. 아이템6  (0) 2022.07.18
[Effective Java] 2장. 아이템5  (0) 2022.07.17
[Effective Java] 2장. 아이템4  (0) 2022.07.16
[Effective Java] 2장. 아이템2  (0) 2022.07.15
[Effective Java] 2장. 아이템1  (0) 2022.07.14

+ Recent posts