I believe what makes any character good is the realism. If I can close my eyes and imagine the character as a real person, and if I can empathize with them, then they are a good character. To me, building a believable character is one of the most important elements to any story.
One of my favorite characters is Sicarius from The Emperor’s Edge series by Lindsay Buroker. He is an assassin and a very efficient one at that. At the start of the series, all you see is that he is a blood thirsty killer. As you get to know him, you begin to see another side of him. I don’t know if you could ever claim he is a “good” person, but you get to watch him grow and find his humanity throughout the story.
What makes him a favorite of mine, though, is that in many ways I can relate to him, especially in his difficulty in relating with people. He has his own view of the world and the way it works, and it’s difficult for him to see beyond that. I also have a thing for assassins in fiction (not in real life, mind you), but that’s another story.
I can definitely see him as a real person, though, and that’s what I love about him and many of the other character in that story and others I’ve read.