CS(ComputerScience)
-
Turing machine (튜링 머신)CS(ComputerScience) 2023. 9. 21. 10:17
안녕하세요. 그린입니다 🍏 이번 포스팅에서는 iOS가 아닌 좀 더 컴퓨터의 근간인 튜링 머신에 대해 한번 알아보려합니다! 일단, 튜링 머신이라하면 생소하신분이 정말 많으실것 같아요. 사실상 우리가 사용하는 스마트폰도 컴퓨터의 일종이고 그 컴퓨터의 원리는 튜링 머신의 개념과 원리에서 이어집니다. 즉, 튜링 머신이 근간이라는거죠 😉 그렇기에 이번 포스팅에서는 그냥 제가 재밌어서 해보고 싶은 공부인 튜링 머신에 대해 자세히 정리해볼까 합니다! 먼저 튜링 머신을 알기전에 앨런 튜링이라는 사람에 대해 알아봐야 합니다 🙋🏻 앨런 튜링 다들 혹시 이미테이션 게임이라는 영화 보셨나요? 간략한 내용은 2차 세계 대전에서 독일군이 글자 배열을 바꿔 무한대에 가까운 암호 조합을 만들어내는 애니그마를 사용하여 연합군이 곤욕을..
-
Uniform Resource의 세가지 그림자 (URI & URL & URN)CS(ComputerScience) 2022. 1. 30. 10:58
안녕하세요. 그린입니다🟢 이번 포스팅에서는 Uniform Resource의 구성인 URI, URL, URN에 대해 학습해보겠습니다🙌 개념과 사용은 익히 다들 서버 통신하면서 알고 계셨을거에요. 저도 마찬가지였는데 정리를 간단히라도 해본적이 없더라구요..?🧐 그래서 오랜만에 미디엄에서 URI를 다룬 글을 보다가 내가 이들의 차이를 정확히 알고 있는건가? 두루뭉실하게 알고만 쓰는게 아닌가 생각이 들었어요🥲 그렇기에 이번 포스팅을 빌미로 딱 핵심으로 차이와 특징을 정리해보려합니다👍 URI와 구성요소인 URN, URL의 관계도 URI URI는 통합 자원 식별자를 뜻하는 Uniform Resource Identifier의 약자로 인터넷에 있는 자원을 나타내는 유일한 주소! URI는 인터넷 및 통신에서의 디폴트 조..
-
동일성과 동등성CS(ComputerScience) 2021. 7. 21. 19:42
안녕하세요. 그린입니다🟢 이번 포스팅에서는 동일성과 동등성에 대해 알아보겠습니다💁🏻 동일성과 동등성 그냥 알아보기전 뜻풀이부터 나름대로 추측해볼까요? 동일성은 A와 B가 전부 같은 즉 동일할때 쓰인다고 보이고, 동등성은 A와 B가 완전히 같진 않지만 같은 부분들이 있어 동등하게 볼 수 있다? 라고 느껴집니다. 그럼 조금 더 자세히 객체지향을 생각하며 알아보겠습니다. 객체지향에서는 두개의 A와 B 객체가 있다고 가정합시다! 그럼 A와 B의 객체는 서로 다른 주소값을 같습니다. 이 경우에는 A와 B가 같은 주소값을 가르키기 않기에 완전히 같다고 할 수 없습니다. 즉 위의 개념으로 동일성과 동등성을 간략히 정리해보겠습니다. - 동일성: A와 B의 객체가 완전히 같은 경우를 의미 - 동등성: A와 B의 객체가 ..
-
연결 리스트CS(ComputerScience) 2021. 5. 20. 12:02
안녕하세요. 그린입니다🟢 이번 포스팅에서는 연결 리스트에 대해 알아보고 Swift로 구현해보겠습니다🧑🏻💻 연결리스트 : 이전 / 다음의 올 값의 참조 정보 가지는 배열의 형태 - 물리적 순서가 순차적이지 않음 - 한번에 찾는 데이터에 접근 불가 - 데이터 삽입 및 삭제 시 이동 없이 참조 값 변경만 해주면되서 배열보다 쉬움 (속도가 빠름) - 노드와 데이터로 구성 - 노드에는 다음 주소를 나타내는 포인터를 지님 - 검색 속도가 느리고 저장 공간 효율성이 떨어짐 Swift로 단방향 연결 리스트 구현하기 import Foundation // 노드 정의, Node의 값인 value와 다음 노드의 주소를 가진 next class Node { var data: T? var next: Node? init(data..
-
큐 (Queue)CS(ComputerScience) 2021. 5. 19. 14:26
안녕하십니까. 그린입니다🟢 이번 포스팅에서는 스택과 반대되는 큐에 대해 알아보겠습니다🧑🏻💻 큐(Queue) : FIFO(선입선출) 방식의 자료구조로 쉽게 생각하면 대기열의 순서에 많이 활용됩니다. -> 스위프트에서는 큐 자료구조가 따로 없기에 직접 만들어서 구현해야 합니다. 큐를 구현하기 위한 4가지 방법 1) 배열 1개를 사용한 큐 구현 : 큐에 데이터를 추가 시 O(1)의 시간복잡도를 가져 편리하지만 대신 큐에서 데이터를 추출 시 이전 데이터들을 전부 위치를 이동시킴으로 O(n) 시간복잡도를 가집니다. 비효율적입니다. 2) 연결 리스트를 사용한 큐 구현 3) 배열 2개를 사용한 큐 구현 : 추가되는 큐와 삭제될 큐(반대 큐)의 배열 2개를 생성하여 기능을 시켜줍니다. 그럴경우 팝과 푸시 모두 O(1..
-
스택CS(ComputerScience) 2021. 5. 18. 09:38
안녕하십니까. 그린입니다🟢 이번 포스팅에서는 스택에 대해 알아보고 Swift로 구현해보겠습니다🧑🏻💻 스택 : 후입선출 자료구조 (LIFO) -> 기능이 제한된 배열 (푸쉬/팝/픽의 세가지 역할밖에 못함) -> 순서가 중요할때 가장 뒤 순서의 데이터를 꺼냄으로 배열 크기와 상관없이 항상 O(1)의 시간 복잡도를 가짐 (배열보다 효율적) -> 중간 데이터 삭제 불가능 Swift로 스택 구현하기 import Foundation struct Stack { var stack: [T] = [] // 초기화 시 아무 값이 주어지지 않을때 동작하는 초기화 init() {} // 초기화 시 값이 주어질때 동작하는 초기화 init(_ element: [T]) { stack = element } // 데이터 저장 muta..
-
우선순위 큐CS(ComputerScience) 2021. 5. 17. 14:49
안녕하세요. 그린입니다🟢 이번 포스팅에서는 우선순위 큐를 Swift로 구현하는것에 대해 알아보겠습니다🧑🏻💻 먼저 우선순위 큐가 무엇인지? 간단히 알아보겠습니다! 우선순위 큐 : 우선순위를 가진 자료들의 큐로 순위가 높은 자료가 먼저 실행 (FIFO) -> 힙구조 -> 완전이진트리 (힙은 완전이진트리) -> 완전이진트리: 마지막 노드 레벨외 나머지 노드 레벨이 전부 채워진 형태의 이진트리 -> 힙활용: 최대,최소 계산 / 힙정렬(우선순위큐) -> 스위프트에서는 배열로 표현하는게 효율적 -> 노드 레벨이 올라갈수록 노드 수 2배씩 증가 -> 부모노드 i / 자식노드: 2i+1 / 2i+2 -> 트리는 O(log n) / 배열은 O(1) Swift 코드로 구현하기 import Foundation struct..
-
멀티프로세스 VS 멀티스레드CS(ComputerScience) 2021. 4. 30. 15:47
안녕하세요. 그린입니다🟢 이번 포스팅에서는 멀티프로세스와 멀티스레드에 대해 비교해보겠습니다🧑🏻💻 프로그래밍을 하다보면 멀티프로세스와 멀티스레드에 대해 어느것이 더 효율적인 성능을 낼 수 있는지 고민하게됩니다. 우선 비교를 하려면 프로세스가 무엇인지 스레드가 무엇인지부터 알아보도록 하겠습니다🎉 프로그램 - 작업을 실행할 수 있는 코드 파일 프로세스 - 프로그램을 실행시키는 인스턴스 - 각 독립된 메모리 영역 (코드 / 데이터 / 스택 / 힙)을 가짐 - 최소 1개의 스레드를 보유 - 프로세스끼리는 접근이 불가 (IPC, 프로세스 간 통신 기법을 통해 접근이 가능. e.g. 소켓) 스레드 - 프로세스 내에서 실행되는 하나의 흐름 단위 - 한 프로세스 내에 둘 이상의 스레드가 동시에 실행되는것이 멀티스레드 ..