문득 든 생각인데 자바 같은 데서 예외가 발생하면
1. 별도의 처리를 하지 않으면 스택 트래이싱 출력 추 죽음
2. try-catch에 걸려 처리 가능
이거인데
러스트의 result도
1. 별도의 처리를 하지 않으면 패닉 -> 죽음
2. unwrap_or 같은 걸로 처리 가능
인데 스택 트레이싱은 언어 자체의 기능이라기보단 디버거에서 제공하는 기능이라 차치하고
만약 어떤 상위 함수에서 호출한 하위 함수에서 예외가 발생하면 상술한 내용으로 죽거나 처리하잖슴
그것도 아니면 예외는 되던지고 Result는 상위 함수로 전파하는데
둘이 정확히 어떤 점이 다른 거임?
아예 뿌리부터 다른 거임? 아니면 구현하고자 하는 기능은 본질적으로 동일한데 그 방식이 다른 거임?
1. 별도의 처리를 하지 않으면 스택 트래이싱 출력 추 죽음
2. try-catch에 걸려 처리 가능
이거인데
러스트의 result도
1. 별도의 처리를 하지 않으면 패닉 -> 죽음
2. unwrap_or 같은 걸로 처리 가능
인데 스택 트레이싱은 언어 자체의 기능이라기보단 디버거에서 제공하는 기능이라 차치하고
만약 어떤 상위 함수에서 호출한 하위 함수에서 예외가 발생하면 상술한 내용으로 죽거나 처리하잖슴
그것도 아니면 예외는 되던지고 Result는 상위 함수로 전파하는데
둘이 정확히 어떤 점이 다른 거임?
아예 뿌리부터 다른 거임? 아니면 구현하고자 하는 기능은 본질적으로 동일한데 그 방식이 다른 거임?
에러가 발생할 수 있다는걸 Result 타입으로 명시적으로 표기하고, 에러가 발생해도 Result 타입의 값을 받으니까 처리할 때 패턴 매칭 등으로 더 깔끔하게 할 수 있지
예외를 아예 타입에 편입시켜서 타입 체킹의 이점을 챙겼다고 이해해도 됨?
틀리지 않았음
예외는 암시적이고 result는 명시적이지
예외를 던지면 이후에 코드가 어디서 실행되고 있을지도 예측하기 힘들고 그것도 골때리는 부분임
예외는 ㄹㅇ로 "던져"서 누군가가 처리해 줄 거야 하는 거라면 Result는 나 오류 났어요 하고 명시적으로 얘기해주는 건가
https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html
긍까 자바는 throws 이런 거 달아줘야 하잖아 얼핏 봤을 때 자바라는 언어 자체랑 예외 시스템이랑 별개인 것처럼 보이는데 Result는 이걸 타입에 박아버렸다고 생각해도 되나?
예외 던지는 거 뭔가 급발진하는 성격 드러운 아저씨 같음
쓰는 입장에서 생각해봐, 그 함수가 그냥 에러 뱉고 튕길지 아니면 에러처리 없이도 안전한 함수인지 어떻게 암 에러 발생 안할거라는 가정 하에 혹시 모르니까 통째로 try catch 걸어버리는거랑 어디서 에러가 발생할 수 있는지 타입 시스템에서부터 거의 전부 명시되어있는거랑은 많이 다르지
둘 다 예외처리 좆까고 쓰레기같이 짜려면 짤 수 있는데 러스트의 경우는 코드가 개씨발지저분해지는데 예외는 티가 잘 안남
글고 러스트의 경우는 복구 불가능한 에러는 걍 panic 내는데 익셉션 쓰는 언어들은 복구 불가능한 에러에도 익셉션 쓰는 경우가 많다 정도
라이브러리 코드 오래짜다보니 명시적으로 에러를 던질지 아는 result 가 훨씬 좋은거 같음
코드가 더러워지는건 설탕으로 충분히 극복된다고 봄
후자
try catch 짜다보면 시벌 뭔 에러로 잡아야하지 이런 고민 많이 들지 않음? - dc App
Result<T>는 데이터 타입이기 때문에 원하는 메서드를 호출해서 패닉을 시키든지, 기본값을 대신 제공하든지 하는 등 에러 처리가 자유로움. 반면 try catch는 에러를 핸들링하는 것이 '특정 코드 블록을 실행한다'는 것으로 강제됨. 에러 처리를 원하는 모든 지점에서 try catch로 둘러싸는 노가다가 필요한 건 물론이고,
원래의 실행 흐름을 따라가기 위한 설계가 추가되어야 함.
내 철학에서 볼때, Result<T, E>는 언어의 자료형 정의를 이용하여 만든 파생 자료형이므로 기존의 문법을 최대한 이용했다는 생각이 들고, try - catch는 아예 새로운 문법이니까 기존의 문법과는 이질적인 느낌이 든다는 생각이 들어. 나는 개인적으로 문법이 적으면서 표현력이 넓은게 좋다. 그래서 Rust를 하기로 했다.
try catch가 좋지