Abstraction deals with simplification, indirection deals with location.
Abstraction is a mechanism that "hides" complicated details of a object in terms of simpler, easier to manipulate terms. In programming, a good example is the difference in details between machine code and the various tools for creating applications that are ultimately based on machine code. Consider creating a Windows Form application with the Visual Studio IDE. The IDE lets you think of the application in terms of easy-to-manipulate items in a What-You-See-Is-What-You-Get manner. The position of a screen widget is abstracted out to a visual location in a frame which you can change by dragging the widget around. Internally, the IDE manipulates the widget using another layer of abstraction such as a high level language (such as C#). C# itself is not manipulated using machine code, it is manipulated using a "Common Runtime Environment" which itself is an abstraction of a computer and operating system.
Indirection refers to making the location of an item transparent. If you know a web resource's URI, you can access the resource without knowing its precise location. You do not access the resource directly, instead you access through a channel that passes your request through a series of servers, applications and routers. Indirection may be considered to be a special type of abstraction where the location is abstracted.
흠?? 어째 정리하고 나니 더 헷갈리는 것 같은 느낌적인 느낌느낌...
굳이 개념을 후려쳐서 비유하자면 A부장님이 B부장님이랑 직접 마주보고 얘기하면 될 것을
A부장님이 나한테 'B 부장한테 가서 이거 어떻게 할 지 물어보고 오너라~' 하고 시켜서 B 부장님의 의사를 내가 묻고 온다면