Decided to write up a detailed answer, that does not rely on any special theorems, and only relies on basic linear algebra properties, and some simple properties of the characteristic polynomial. The goal is to prove that $A$ is unitarily diagonalizale iff $A^*A = AA^*$. I've not seen many proofs like this, so here it is.
Let $A^*A = AA^*$ for a complex matrix $A\in M_n$. Such a matrix is called normal, and the properties discussed here generalize naturally to real normal matrices, in which case we replace the conjugate transpose $^*$ by $^T$. Then:
- $\|Ax\| = \|A^*x\|$.
Proof: $\|Ax\|^2 = x^*A^*Ax = x^*AA^*x = \|A^*x\|^2$.
- $N(A) = N(A^*)$
Proof: If $x\in N(A)$, then $0 = \|Ax\| = \|A^*x\|\implies x\in N(A^*)$.
- $R(A) \bot N(A)$ and $R(A)=R(A^*)$.
Proof: If $y \in R(A), x\in N(A)$, then $x^*y = x^*A\xi = 0$, since $x\in N(A^*)$. $R(A)=R(A^*)$ is the corollary.
- Let $\lambda\in\mathbb{C}$, then $A + \lambda I$ is normal:
Proof: $(A + \lambda I)^*(A + \lambda I) = A^*A + \overline{\lambda} A+\lambda A^* + |\lambda|^2 I = (A + \lambda I)(A + \lambda I)^*$
- Let $x$ be an eigenvector of $A$, i.e. $Ax = \lambda x$, then $x^*A = \lambda A$.
Proof: $N(A - \lambda I) = N(A^* - \overline{\lambda} I)$ from 2. and 4.
- Let $A$ be nonzero and singular, then $U^*AU = \begin{pmatrix}B & 0\\0 & 0_{n-r}\end{pmatrix} = B \oplus 0_{n-r}$ for some unitary matrix $U$, nonsingular $B\in M_r$, and $r = \DeclareMathOperator{\rank}{rank}\rank(A)=\rank(B)$.
Proof: Let $U = \begin{pmatrix}U_1 & U_2\end{pmatrix}$ be unitary, such that the columns of $U_1$ form a basis for $R(A)$ and the columns of $U_2$ form a basis for $N(A)$. Then using 2. and 3. and a calculation it is easy to verify that $U^*AU = B\oplus 0_{n-r}$. $B\in M_r$ implies that it is nonsingular and $$r = \rank(B) = \rank(B \oplus 0_{n-r}) = \rank(U^*AU) = \rank(A).$$
- Let $\lambda$ be an eigenvalue of $A$ with algebraic multiplicity $\nu$, then $\dim N(A-\lambda I) = \nu$.
Proof: From 6. we know that $U^*(A - \lambda I)U = B\oplus 0_{n-r}$, thus $U^*AU = (B + \lambda I_r)\oplus \lambda I_{n-r} = C$, where $r = \rank(A - \lambda I)$. As such, the characteristic polynomial of $A$, $p_A(t) = p_C(t)$, the char. polynomial of $C$. But $p_C(t) = (\lambda - t)^{n-r}p_B(t - \lambda)$, and since $B$ is nonsingular, it follows that $\nu = n-r=\dim N(A - \lambda I)$.
- If $\lambda\neq\mu$ are distinct eigenvalues of $A$, then $N(A - \lambda I)\bot N(A - \mu I)$.
Proof: Let $x,y$ be eigenvectors of $A$, corresponding to $\lambda,\mu$, respectively. Then using 5. $\lambda x^*y = x^*Ay = \mu x^*y \implies (\lambda - \mu)x^*y = 0\implies x^*y = 0$.
- If $\{\lambda_i\}$ are the $k$ distinct eigenvalues of $A$, then $\mathbb{C}^n = N(A - \lambda_1 I)\oplus\cdots\oplus N(A - \lambda_k I)$. In other words, if $U\in M_n$ has eigenvectors of $A$ as its columns, then they form an orthonormal basis for $\mathbb{C}^n$ and $U$ unitarily diagonalizes $A$.
Proof: If $\nu_i$ is the algebraic multiplicity of $\lambda_i$, then we know that $n = \nu_1+\cdots+\nu_k$. This, combined with 7. and 8. gives the final result.
Now for the $\implies$ direction, if $A$ has $n$ orthonormal eigenvectors, then $A^*A = AA^*$.
Proof: Let $U\in M_n$ have the eigenvectors of $A$ as its columns, then it is unitary, $A = U\operatorname{diag}(\lambda_1,\ldots,\lambda_n)U^* = U\Lambda U^*$, and thus $$A^*A = U\overline{\Lambda} U^*U\Lambda U^* = U\Lambda \overline{\Lambda} U^* = AA^*.$$