프로그래밍 언어12 try-catch문에 대하여 시스템에 회복탄력성을 제공하는 메커니즘 Q. try catch문의 정확한 기능은 무엇인가? 흔히 catch문의 기능을 언급할 때 예외를 잡는다고 표현한다. 그러나, 설명이 불충분한 측면이 있다. 왜 잡느냐가 빠져있기 때문이다. 나는 보통 try-catch문을 이용할 때 catch문에서 예외가 잡히면 debugprint를 터미널에 찍는 식으로 이용해왔다. 그러나 이것은 예외 알림에 가깝지 예외 처리에 해당하지 않는다. 발생한 예외에 대한 실질적 대비책이 아니기 때문이다. 만약 catch문이 예외 알림의 기능만 했다면 catch문을 사실상 또 하나의 메소드처럼 쓸 수 있는 수준의 자유도를 주지는 않았을 것이다.정상 흐름에서 벗어난 동작에 대한 처리를 마련함으로써 다시 프로그램이 정상적으로 동작할 수 있도록 .. 2025. 5. 28. 왜 extends 뒤에는 클래스가 단 하나만 존재할 수 있고, implements 뒤에는 인터페이스가 여러개 존재할 수 있는가? 클래스로부터는 구현을 물려받고, 인터페이스로부터는 구현을 물려받지 않기 때문이다.구현을 물려받는다는 것은 곧 지시사항을 물려받는 것이다.여러 명의 부모로부터 지시사항을 물려받는다면 자식의 입장으로서는 어떤 부모의 지시사항을 따라야 할지 알 수가 없다. class A { print() { System.out.println("A"); }}class B { print() { System.out.println("B"); }}class C extends A, B { // 2025. 5. 28. 객체가 같다는 것은 정확히 어떤 의미인가? 두 가지 측면에서 이야기할 수 있다.동일성 → heap 영역에 할당된 객체의 주소값이 서로 같다.동등성 → 각 객체가 갖고 있는 데이터가 서로 같다. 꼬리질문 1:그렇다면 아래 코드의 결과를 예상해 보시오.String str1 = "Hello";String str2 = "Hello";String str3 = new String("Hello");System.out.println(str1 == str2);System.out.println(str1 == str3);System.out.println(str1.equals(str3));꼬리답변1:true true true로 예상하였으나 결과는 true false true가 나왔음 틀린 이유:“무엇을 비교하는지”에 대한 이해가 없었음. c++에서는 연산자 오버로딩을.. 2025. 5. 28. Garbage collection heap 영역에 할당된 객체 중 필요 없어진 것을 메모리에서 해제하는 것필요 없어진 객체란 정확히 무엇을 의미하는가?//for문이 1번 반복될 때마다 이전 NewObject 객체는 참조를 상실하게 된다. NewObject obj;for (int i = 0; i → for문이 1번 반복될 때마다 heap 영역 바깥으로의 도달 능력(reachability)을 상실한 객체가 생겨난다. 식별한 제거 대상 객체를 어떻게 제거하는가?Mark and Sweep: 총 3단계로 이루어져 있다.Mark → 전역변수, 현재 스택의 지역변수로부터 연결된 참조 변수들을 찾아내어 마킹Sweep → 마킹되지 않은 객체들을 heap에서 제거Compaction → 파편화된 객체들을 다시 정리 꼬리 질문 1:왜 Compaction 과.. 2025. 5. 28. [Error]Statements must be separated by newlines or semicolons import sys A = input() B = (int)A C = B - 543 print(C) 이 코드의 B = (int)A 이 부분에서 제목의 에러가 발생했다.(도대체 왜???) B = (int)(A) 이렇게 바꿔주니 사라지긴 했는데 흠 왜 그런지 모르겠다. 2023. 10. 19. [Error] TypeError: can only concatenate list (not "str") to list import sys A = input().split() B = "??!"\ print(A + B) 이 코드를 쳤더니 제목의 에러가 나왔다. 직역하면 "list에는(str이 아니라) list만 연결지을 수 있다"라는 뜻. 그래서 아래 코드를 통해 A와 B의 자료형을 확인해 보았다. import sys A = input().split() B = "??!" print(type(A)) print(type(B)) 결과는 아하 사용자 입력을 받는 변수 A에는 해당 입력이 list 형태로 저장되기 때문에 발생하는 문제였다. 2023. 10. 19. [개념]Python 파일 실행하기 알고리즘 테스트 때문에 정말 오랜만에 python을 꺼내들었다. 하지만, 파일 확장자 이름마저도 기억이 안 나는 데다 내가 짠 코드를 실행하는 방법도 까먹었다. 그래서 정리를 한 번 해보려 한다. 1. 터미널 없이 실행하기 vscode에서 Python extension pack을 설치하고, 실행 -> 디버깅 없이 실행을 클릭하면 실행할 수 있다. 2. 터미널에서 간단한 코드 실행하기 터미널에 Python3 이렇게 치면 위와 같이 간단한 코딩의 결과를 바로바로 확인할 수 있다. 나가고 싶을 땐 "exit()"을 터미널에 입력하면 된다. 3. 터미널에서 명령어로 실행하기 위와 같이 터미널에 "python [파일 이름]" 이렇게치면 파이썬 파일을 실행할 수 있다. (원래는 python3인데 나는 python으.. 2023. 10. 18. 다트 클래스 사용법 기초 객체 지향 프로그래밍의 핵심 중 하나인 클래스를 사용하는 코드의 예시는 아래와 같으며 크게 4부분으로 나누어 살펴본다. import 'package:flutter/material.dart'; //1. Import문 class MyWidget extends StatelessWidget { //2. MyWidget 클래스 정의 @override Widget build(BuildContext context) { //3. build 매서드 정의 return Container( color: Colors.blue, child: Center( child: Text( 'Hello, Flutter!', style: TextStyle(fontSize: 24, color: Colors.white), ), ), ); } } .. 2023. 9. 6. 다트 기초(C언어와의 차이점을 중심으로) 이 글은 제가 유일하게 아는 언어인 C언어와 구별되는 Dart의 특징적 개념만을 정리하였으므로 프로그래밍 자체가 처음이신 분들은 이해하기 어려울 수 있습니다. dynamic type vs var type 둘 다 데이터 타입을 명시적으로 지정하지 않고, 컴파일러가 할당된 값의 데이터 타입을 기반으로 타입을 추론하도록 한다. 이로써 코드를 간결하게 작성할 수 있는 장점이 있다. 그러나 var type으로 선언된 변수는 한 번 초기화했을 당시의 자료형만 계속 쓸 수 있다. var name = 12; // 위와 같이 integer로 초기화되어 있다면 // name이라는 변수에는 string이나 bool 같은 자료형의 데이터는 저장할 수 없다. name = 43; [O] name = 'string'; [X] na.. 2023. 9. 3. 가변 인자에 대하여 가변인자란 인자의 갯수가 정해지지 않은 인자를 의미한다. 가변 인자를 갖는 함수 프로토타입을 선언할 때는 최소 1개 이상의 고정 인수가 있어야 하고, 가변 인자를 나타내는 '...'은 파라미터 순서상 맨 마지막에 위치해야 한다. int sum(int count, ...) { int res = 0; va_list ap; int i; va_start(ap, count); for(i=0; i 이 부분은 ap 안의 주소값을 t만큼 증가시켜서 ap가 다음 가변인자를 가리키도록 하는 게 목적 ap += _INTSIZEOF(t) - _INTSIZEOF(t) -> 이 부분은 현재 ap가 가리키는 가변 인자를 리턴하는 게 목적 4. va_end #define va_end(ap) ( ap = (va_list)0 ) 위와 .. 2023. 7. 4. 이전 1 2 다음