Struggling to understand why $Hom(-, -)$ is a bifunctor and how exactly it suppose to map? Seems like I do understand covariant the $Hom(A, -)$ and contravariant $Hom(-, A)$ functors. But when it comes down to the $Hom(-, -)$, then I am getting lost:
1) How does it work? What does it do with objects and how does it treat morphisms? [I assume it takes a product category $C \times C$ as an input, but still underlaying details are unclear: I can't realize what is fixed and what is free.]
2) Why is it common to state that $Hom(-, -)$ is a kind of $C^{op} \times C \mapsto \mathbb{SET}$ functor? [My assumption is that it because iterating over the first argument, having the second one fixed (i.e. $Hom(A, A'), Hom(B, A'), Hom(C, A'), ...$ naturally gives a contravariant functor, while same kind of iteration on the second argument - gives a covariant functor.]
2.1) Is it a matter of preference? In other words, is it safe to say that $C \times C^{op} \mapsto \mathbb{SET}$ is equally valid definition? [I assume it is not matter of preference, but still better to ask.]
Could someone provide crystall clear definition of what $Hom(-, -)$ is and how should I think of it as an instance of $C \times C^{op} \mapsto \mathbb{SET}$ functors?
 A: Indeed, a bifunctor is simply a functor $F$ defined on a product category. However, $Hom$ is not a functor, when defined on $\mathcal{C} \times \mathcal{C}$: it sends a morphism $(A,C)\to(B,C)$ to a morphism $Hom(B,C)\to Hom(A,C)$, so it can't be a covariant functor (the arrow is in the wrong direction), but it also can't be a contravariant functor, for essentially the same reason: it sends $(A,B)\to(A,C)$ to a morphism $Hom(A,B)\to Hom(A,C)$. To fix this, we need to make either both factors covariant, or both factors contravariant. The way to do this, in either case, is to define one of the factors on the opposite category. Because people like covariant functors more than contravariant functors, they tend to choose the first, to make $Hom$ covariant. It would, indeed, be perfectly valid to define $Hom$ to be a contravariant functor from $\mathcal{C} \times \mathcal{C}^{op}$, it's just a bit odd. 
As for $Hom$ specifically: it is the functor from $\mathcal{C}^{op}\times \mathcal{C}$ to $\mathbb{SET}$, such that for every $(A,B)$ in $C^{op} \times C$ (so $A$ and $B$ are both objects of $C$ (hence of $C^{op}$)), $Hom(A,B)$ is the set of all morphisms from $A$ to $B$, and for every morphism $(f,g): (A,B)\to(C,D)$ of $C^{op}\times C$ (so $f: C \to A$, $g: B \to D$ in $\mathcal{C}$), $Hom(f,g)$ is the morphism of sets $Hom(A,B) \to Hom(C,D)$ sending a morphism (of $\mathcal{C}$) $\varphi: A \to B$ to the morphism $g\circ\varphi\circ f\in Hom(C,D)$.
Alternatively, treating $Hom$ as a contravariant functor $\mathcal{C}\times\mathcal{C}^{op} \to \mathbf{SET}$: it is the functor from $C \times C^{op}$ to $\mathbb{SET}$, such that for every $(A,B)$ in $C \times C^{op}$ (so $A$ and $B$ are both objects of $C$ (hence of $C^{op}$)), $Hom(A,B)$ is the set of all morphisms from $A$ to $B$, and for every morphism $(f,g): (A,B)\to(C,D)$ of $C \times C^{op}$ (so $f: A \to C$, $g: D \to B$ in $\mathcal{C}$), $Hom(f,g)$ is the morphism of sets $Hom(C,D)\to Hom(A,B)$ sending a morphism (of $\mathcal{C}$) $\psi: C \to D$ to the morphism $g\circ\psi\circ f\in Hom(A,B)$.
